PHP通过GET/POST获取到的参数被自动转义的问题

之前遇到过一次这个问题,当时以为是新装的扩展问题,排查一番后发现不是。这次又碰上了,当时忘了之前是怎么解决的了。

日志记录获取到的参数,类似如下:

'args' => '[1002,[{\\"tid\\":\\"1556\\",\\"pid\\":188204955,\\"

搜索一番,发现magic_quotes_gpc这个设置会影响到,直接去看php.ini设置,这里被设置成on了。

magic_quotes_gpc
影响到 HTTP 请求数据(GET,POST 和 COOKIE)。不能在运行时改变。在 PHP 中默认值为 on。

二进制的相关知识

位的概念:在计算机中,一个0或1称为一位(bit)。

字节:连续的八位称为一个字节(Byte),字节是计算机中可单独处理的最小单位。即以字节
为基本单位来解释信息,规定1个字节是8个二进制位。

通常1个ASCII码用1个字节存放,1个汉字用2个字节存放,双精度浮点实数用8个字节存放。
下面列表C语言中定义类型所占字节以及数据范围。

类型标识符类型说明长度(字节)范围备注
char字符型1-128 ~ 127-2^7~(2^7-1)
unsigned char无符字符型10 ~ 2550~(2^8-1)
short int短整型2-32768 ~ 32767-2^15~(2^15-1)
unsigned short int无符短整型20 ~ 655350~(2^16-1)
int整型4-2147483648 ~ 2147483647-2^31~(2^31-1)
unsigned int无符整型40 ~ 42949672950~(2^32-1)
float实型(单精度)41.1810-38 ~ 3.4010387位有效位
double实型(双精度)82.2310-308 ~ 1.791030815位有效位
long double实型(长双精度)103.3710-4932 ~ 1.1810493219位有效位

按照posix标准,一般整形对应的*_t类型为:

长度类型标识符
1字节uint8_t
2字节uint16_t
4字节uint32_t
8字节uint64_t

参考资料
http://my.oschina.net/goal/blog/195749
http://my.oschina.net/goal/blog/202378
http://my.oschina.net/goal/blog/202381

nl2br真正的用法

最近开发中,遇到一处日志里有\n导致换行引起的bug,感觉很简单,直接使用nl2br过滤,结果发现问题依然存在。

特意翻看了下手册,描述如下:

nl2br — 在字符串所有新行之前插入 HTML 换行标记
在字符串 string 所有新行之前插入 '<br />' 或 '<br>',并返回。

好吧,恍然大悟,这货不是用来过滤\n的,还是踏踏实实用str_replace吧。

网站从WordPress成功转换到Typecho了

今天中午吃完饭,下定决心转换到Typecho。

折腾一番,基本搞定,遗留一个问题:点击文章链接跳转到首页了。

搜索一番,估计是Nginx配置问题。

晚上到家,重新搞起,顺利解决。

网上没有转换后,原WordPress的地址如何保留,自己修改了下index.php,顺利将原链接301到新地址上了。