要么页面原始汉字和从数据库里取出的汉字全是乱码;要么原始汉字和数据库汉字,一个显示正常了,另一个就变成乱码了。很烦很气人! 问题需要一步一步的解决。在实际操作以下方法之前,需要配置 Web 服务器,使其与 PHP 集成,最终可以调试 PHP 程序。我们以常见的 GB2312 和 UTF-8 字符集为例来测试和说明。浏览器是 IE7.0。
页面原始汉字乱码的解决
PHP字符集编码的原理我就不说了,网上搜索一下字符串“PHP 乱码”,整框整框的文章供大家阅读。我最关心的是具体怎么做,就可以解决这个实际问题。我最喜欢使用的文本编辑器是 UltraEdit,不仅仅因为它可以进行 16 进制编辑,还因为它支持多编码文档。解决这个问题就需要使用 UltraEdit 的这个功能。
打开中文 Windows,用 UltraEdit 创建一个文本文件,手工输入一个 PHP 页面文件,文件内容如下。保存为 test1.php 文件,注意保存时“格式”下拉框选择“默认”- 特别注意这里。
<ol class="dp-xml"><li class="alt"><span><span class="tag"><span> </span><span class="tag-name">Html</span><span class="tag">></span><span> </span></span><li><span class="tag"><span> </span><span class="tag-name">head</span><span class="tag">></span><span> </span><li class="alt"><span class="tag"><span> </span><span class="tag-name">title</span><span class="tag">></span><span>页面标题</span><span class="tag"><span> /title</span><span class="tag">></span><span> </span><li><span class="tag"><span> </span><span class="tag-name">META</span><span> </span><span class="attribute">http-equiv</span><span>=</span><span class="attribute-value">Content</span><span>-Type </span><span class="attribute">content</span><span>=</span><span class="attribute-value">"text/html; charset=gb2312"</span><span class="tag">></span><span> </span><li class="alt"><span class="tag"><span> /head</span><span class="tag">></span><span> </span><li><span class="tag"><span> </span><span class="tag-name">Body</span><span class="tag">></span><span> </span><li class="alt"> <span>电脑学习网:</span><span class="tag"><span> </span><span class="tag-name">br</span><span class="tag">></span><span> </span><li><span class="tag"><span> /body</span><span class="tag">></span><span> </span><li class="alt"><span class="tag"><span> /html</span><span class="tag">></span><span> </span></span></li></span></li></span> </li></span></li></span></li></span></li></span></span></li></span></li></span></li></ol>
用 IE 浏览器打开网站的这一页面。可以看到,页面显示正常。在 IE 浏览器的“查看”/“编码”菜单下看到(勾选了“自动选择”),字符编码是 GB2312。
[Firefox 2.0 下显示正常。]
然后,在 UltraEdit 的“文件”菜单下,选“另存为”,格式选择“UTF-8”,文件名为 test2.php。用 IE 浏览器打开这一页面。可以看到,页面显示正常(其实英文字体已经有略微的变化了)。在 IE 浏览器的“查看”/“编码”菜单下看到(勾选了“自动选择”),字符编码是 UTF-8,自动变了!注意 一句并没有修改,但是浏览器却自动辨别出了真实的PHP字符集编码!看来 IE 还是比较聪明的,也说明 IE 自动判别字符集是比 METE 标签中 charset=xxx 的定义优先的。
[Firefox 2.0 下显示出现乱码。]
在该页面首部加语句
<ol class="dp-xml"> <li class="alt"><span><span class="tag"></span><span class="tag-name">php</span><span> </span></span></li> <li><span>header("Content-Type:text/html;</span></li> <li> <span class="attribute">charset</span><span>=</span><span class="attribute-value">utf</span><span>-8"); </span> </li> <li class="alt"> <span class="tag">?></span><span> </span> </li> </ol>
再次保存该页面文件,“格式”下拉框选择“默认”,文件名为 test3.php。用 IE 打开网站里的该文件,这次看到,除过英文字母,汉字变成乱码了!同时在 IE 浏览器的“查看”/“编码”菜单下看到(勾选了“自动选择”),字符编码是 UTF-8,已经被强制改变了。
出现汉字乱码的原因,是因为原本的 GB2312 编码,被强制以 UTF-8 的编码形式显示,所以乱码出现了。这个时候在浏览器里人为指定 GB2312 编码,页面汉字又显示正常了(真正制作页面时是不能这么做的,非要让浏览者自己选择PHP字符集编码,一个是浏览者可能根本不知道怎么选择编码、选什么编码,再者也显得我们太菜了!)。
[Firefox 2.0 下显示出现乱码。]
在该页面首部加语句
<ol class="dp-xml"><li class="alt"><span><span class="tag"><span> ?php </span></span><li><span>header("Content-Type:text/html;</span></li> <li> <span class="attribute">charset</span><span>=</span><span class="attribute-value">GB2312</span><span>"); </span> </li> <li class="alt"> <span class="tag">?></span><span> </span> </li></span></li></ol>
再次保存该页面文件,“格式”下拉框选择“UTF-8”,文件名为 test4.php。用 IE 打开网站里的该文件,奇怪:看到页面汉字显示正常,并不是预想到的乱码?!在 IE 浏览器的“查看”/“编码”菜单下看到(勾选了“自动选择”),PHP字符集编码仍然是 UTF-8,并没有被强制改变了 GB2312 字符集。
这个时候在浏览器里人为指定 GB2312 编码,发现 IE 浏览器并不能人为指定编码。看来 IE 浏览器对 UTF-8 字符集特别关照。无论是在 META 标签指定,还是 PHP 语句指定,都不能让 IE 浏览器显示出汉字乱码。
[Firefox 2.0 下显示出现乱码。]
小结一下: 以上测试主要在 IE7.0 下进行,Web 服务器为 Windows Server 2003 下的 IIS6.0,PHP 版本为 4.4.7。可以看到,IE7.0 为了正确识别字符集做了很多额外的自动处理的工作,以显示其智能和友好。有时太殷勤了反而使我们不知所措。由于汉字乱码问题与不同的浏览器及其不同的版本、Web 服务器、后台脚本和不同的字符集都有点关系,所以问题显得特别复杂。作为 Web 编程人员,主要关心与自己有关的因素就可以了,没必要成为PHP字符集编码的专家。为了兼容目前流行的 IE 和 FF 浏览器,我们可以按照以下简单的方法处理我们的 PHP 代码:
1,页面的真正字符集与 META 标签指定的应该一致;
2,也可以使用 header("Content-Type:text/html;charset=xxx"); 语句指定字符集,但是不能与字符的真正字符集冲突,也不能与 META 标签冲突。(尽管根据测试结果表明,当 header() 和 META 冲突时,header() 比 META 指定的字符集更优先,因为根据 HttpWatch Basic 跟踪显示,header() 指定字符集后,IE 浏览器 Type 会明确的得到字符集指定。但是不能保证其它非主流浏览器也会这样。)
3,PHP字符集编码不能与数据库取回的字符的字符集冲突,否则页面会出现页面本身的汉字和数据库取回的汉字,全部乱码或部分乱码问题。

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

Dreamweaver Mac版
视觉化网页开发工具

记事本++7.3.1
好用且免费的代码编辑器

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器