PHP字符集编码出现乱码的解决办法_PHP教程
要么页面原始汉字和从数据库里取出的汉字全是乱码;要么原始汉字和数据库汉字,一个显示正常了,另一个就变成乱码了。很烦很气人! 问题需要一步一步的解决。在实际操作以下方法之前,需要配置 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字符集编码不能与数据库取回的字符的字符集冲突,否则页面会出现页面本身的汉字和数据库取回的汉字,全部乱码或部分乱码问题。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。
