定位问题时常用的技巧
定位中文编码问题通常采用最笨的也是最有效的办法―在你认为有嫌疑的程序处理后打印字符串的内码通过打印字符串的内码你可以发现什么时候中文字符被转换成 Unicode什么时候Unicode 被转回中文内码什么时候一个中文字成了两个 Unicode 字符什么时候中文字符串被转成了一串问号什么时候中文字符串的高位被截掉了……
取用合适的样本字符串也有助于区分问题的类型如aa啊 aa?@aa 等中英相间GBGBK特征字符均有的字符串一般来说英文字符无论怎么转换或处理都不会失真(如果遇到了可以尝试着增加连续的英文字母长度)
解决各种应用的乱码问题
) 使用 标签设置页面编码
这个标签的作用是声明客户端的浏览器用什么字符集编码显示该页面xxx 可以为 GBGBKUTF(和 MySQL 不同MySQL 是 UTF)等等因此大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码这样才不会造成编码错误而产生乱码但是有的时候我们会发现有了这句还是不行不管 xxx 是哪一种浏览器采用的始终都是一种编码这个情况我后面会谈到
请注意 是属于 HTML 信息的仅仅是一个声明仅表明服务器已经把 HTML 信息传到了浏览器
) header(contenttype:text/html; charset=xxx);
这个函数 header() 的作用是把括号里面的信息发到 http 标头如果括号里面的内容为文中所说那样那作用和 标签基本相同大家对照第一个看发现字符都差不多的但是不同的是如果有这段函数浏览器就会永远采用你所要求的 xxx 编码绝对不会不听话因此这个函数是很有用的为什么会这样呢?那就得说说 http 标头和 HTML信息的差别了
http 标头是服务器以 http 协议传送 HTML 信息到浏览器前所送出的字串而 标签是属于 HTML 信息的所以 header() 发送的内容先到达浏览器通俗点就是 header() 的优先级高于 (不知道可不可以这样讲)假如一个 php 页面既有header(contenttype:text/html;charset=xxx)又有浏览器就只认前者 http 标头而不认 meta 了当然这个函数只能在 php 页面内使用
[] [] [] []