目錄
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总,htmlspecialchars
首頁 後端開發 php教程 php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总,htmlspecialchars_PHP教程

php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总,htmlspecialchars_PHP教程

Jul 13, 2016 am 09:58 AM
dedecms gbk htmlspecialchars php5.4

php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总,htmlspecialchars

从旧版升级到php5.4,恐怕最麻烦的就是htmlspecialchars这个问题了!当然,htmlentities也会受影响,不过,对于中文站来说一般用htmlspecialchars比较常见,htmlentities非常少用到。

可能老外认为网页普遍应该是utf-8编码的,于是苦了那些用GB2312,GBK编码的中文站......!

具体表现:
复制代码 代码如下:
$str = "9enjoy.com的php版本是5.2.10";
echo htmlspecialchars($str);

gbk字符集下输出为空...utf-8下,输出正常。

为什么呢,原因在于5.4.0对这个函数的变化:
复制代码 代码如下:
5.4.0   The default value for the encoding parameter was changed to UTF-8.

原来是什么呢?
复制代码 代码如下:
string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = 'UTF-8' [, bool $double_encode = true ]]] )

Defines encoding used in conversion. If omitted, the default value for this argument is ISO-8859-1 in versions of PHP prior to 5.4.0, and UTF-8 from PHP 5.4.0 onwards.

原来是ISO-8859-1,5.4后默认变成utf-8!然后中文使用这个函数就输出为空白了。

国内一堆开源程序在5.4下都会有这样的问题,DISCUZ官方也建议用户不要升级到5.4

解决方案:

1.苦逼的修改所有用到htmlspecialchars地方的程序

1.1 其第二个$flags参数,默认是ENT_COMPAT,因此改成
复制代码 代码如下:
htmlspecialchars($str,ENT_COMPAT,'GB2312');

为什么不是GBK?因为没有GBK这个参数,如果强行使用GBK,则报错给你看:
复制代码 代码如下:
Warning: htmlspecialchars(): charset `gbk' not supported, assuming utf-8

为了能使用GBK,则改成:
复制代码 代码如下:
htmlspecialchars($str,ENT_COMPAT,'ISO-8859-1');

1.2.一样是改程序,但可以省略一个参数。
可以在网页头部加
复制代码 代码如下:
ini_set('default_charset','gbk');

然后改成
复制代码 代码如下:
htmlspecialchars($str,ENT_COMPAT,'');

文档中有写:An empty string activates detection from script encoding (Zend multibyte), default_charset and current locale (see nl_langinfo() and setlocale()), in this order. Not recommended.
大概意思就是:传入空字符串则使用default_charset的编码

1.3.封装一个函数吧...本来htmlspecialchars这个单词一直不好记。
复制代码 代码如下:
function htmlout($str) {
    return htmlspecialchars($str,ENT_COMPAT,'ISO-8859-1');
}

然后去批量替换。

2.直接修改源码,重编译!这也是目前我在线上做的方案。
修改ext/standard/html.c
大概在372行
复制代码 代码如下:
/* Default is now UTF-8 */
if (charset_hint == NULL)
return cs_utf_8;

把cs_utf_8改成 cs_8859_1
复制代码 代码如下:
/* Default is now UTF-8 */
if (charset_hint == NULL)
return cs_8859_1;

编译后,原程序就不用做任何调整了。
安装方法可参考:http://www.bkjia.com/article/63388.htm

windows下怎么办?这个,自己想办法编译吧,难度比较大...
提供一个网址供参考:http://www.bkjia.com/article/63391.htm
引用其一句话:准备好咖啡、可乐,做好准备,可能要折腾数小时…

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/978728.htmlTechArticlephp5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总,htmlspecialchars 从旧版升级到php5.4,恐怕最麻烦的就是htmlspecialchars这个问题了...
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
Go語言編碼解析:UTF-8與GBK對比 Go語言編碼解析:UTF-8與GBK對比 Mar 28, 2024 pm 01:54 PM

Go語言編碼解析:UTF-8與GBK比較在Go語言中,處理字串編碼是常見的任務之一。其中,UTF-8和GBK是兩種常用的字元編碼方式。本文將對UTF-8和GBK進行詳細對比,探討它們的差異和使用方法,並附上具體的程式碼範例。一、UTF-8與GBK的簡介UTF-8:UTF-8是一種可變長度的Unicode編碼方式,它可以表示世界上幾乎所有語言的字元。 UTF-8

帝國cms資源網模板在哪 帝國cms資源網模板在哪 Apr 17, 2024 am 10:00 AM

帝國CMS模板下載位置:官方模板下載:https://www.phome.net/template/第三方模板網站:https://www.dedecms.com/diy/https://www.0978.com.cn /https://www.jiaocheng.com/安裝方式:下載模板解壓縮模板上傳模板選擇模板

dedecms怎麼上傳本機視頻 dedecms怎麼上傳本機視頻 Apr 16, 2024 pm 12:39 PM

如何使用 Dedecms 上傳本機影片?準備影片文件,確保格式符合 Dedecms 支援的格式。登入 Dedecms 管理後台,建立新的影片分類。在影片管理頁面上傳影片文件,填寫相關資訊並選擇影片分類。在編輯文章時嵌入視頻,輸入上傳視頻的文件名並調整尺寸。

dedecms怎麼實現模板替換 dedecms怎麼實現模板替換 Apr 16, 2024 pm 12:12 PM

在 Dedecms 中實作範本替換可以透過以下步驟:修改 global.cfg 文件,設定所需的語言包。修改 taglib.inc.php 鉤子文件,加入對語言後綴模板文件的支援。建立帶有語言後綴的新模板文件,修改所需內容。清除 Dedecms 快取。

dedecms都能做什麼網站 dedecms都能做什麼網站 Apr 16, 2024 pm 12:24 PM

Dedecms是一款開源CMS,可用於創建各種類型的網站,包括:新聞網站部落格網站電商網站論壇和社群網站教育網站入口網站其他類型的網站(例如企業網站、個人網站、相簿網站、影片分享網站)

dedecms有什麼漏洞 dedecms有什麼漏洞 Aug 03, 2023 pm 03:56 PM

DedeCMS是一個開源的內容管理系統,會存在一些潛在的漏洞和安全風險:1、SQL注入漏洞,攻擊者可以透過建構惡意的SQL查詢語句來執行未經授權的操作或取得敏感資料;2、文件上傳漏洞,攻擊者可以上傳包含惡意程式碼的檔案到伺服器上,從而執行任意程式碼或取得伺服器權限;3、敏感資訊外洩;4、未經身份驗證的漏洞利用。

dedecms怎麼用 dedecms怎麼用 Apr 16, 2024 pm 12:15 PM

Dedecms 是一款開源中文 CMS 系統,提供內容管理、模板系統和安全保護等功能。具體使用方法包含以下步驟:1. 安裝 Dedecms。 2. 配置資料庫。 3. 登入管理介面。 4. 創建內容。 5. 設定模板。 6. 管理用戶。 7. 維護系統。

dedecms怎麼改圖片 dedecms怎麼改圖片 Apr 16, 2024 pm 12:27 PM

修改 DedeCMS 圖片的步驟:登入 DedeCMS 後台。造訪「系統」>「媒體管理」頁面。選擇要修改的圖片。點選“編輯”按鈕。修改圖片標題、描述、標籤和版權資訊。裁剪或調整圖片大小。點選「儲存」按鈕儲存變更。返回媒體管理頁面,點選「更新圖片庫」按鈕,使變更套用到網站中。

See all articles