ホームページ バックエンド開発 PHPチュートリアル php5.4以上版本htmlspecialchars输出为空问题解决方法汇总

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

Jun 06, 2016 pm 08:05 PM
php utf-8

这篇文章主要介绍了php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总,本文给出多种解决这个问题的方法,需要的朋友可以参考下。

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

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

具体表现:

<span style="font-size: 14px;">&lt;span style=&quot;font-size:18px;&quot;&gt;$str = "9enjoy.com的php版本是5.2.10";<br>echo htmlspecialchars($str);&lt;/span&gt;</span>
ログイン後にコピー

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

为什么呢,原因在于5.4.0对这个函数的变化:

&lt;span style=&quot;font-size:18px;&quot;&gt;5.4.0   The default value for the encoding parameter was changed to UTF-8.&lt;/span&gt;
ログイン後にコピー

原来是什么呢?

<span style="font-size: 14px;">&lt;span style=&quot;font-size:18px;&quot;&gt;string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = 'UTF-8' [, bool $double_encode = true ]]] )<br>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.&lt;/span&gt;<br></span>
ログイン後にコピー

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

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

解决方案:

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

1.1 其第二个$flags参数,默认是ENT_COMPAT,因此改成

<span style="font-size: 14px;">&lt;span style=&quot;font-size:18px;&quot;&gt;htmlspecialchars($str,ENT_COMPAT,'GB2312');&lt;/span&gt;<br></span>
ログイン後にコピー

为什么不是GBK?因为没有GBK这个参数,如果强行使用GBK,则报错给你看:

&lt;span style=&quot;font-size:18px;&quot;&gt;Warning: htmlspecialchars(): charset `gbk' not supported, assuming utf-8&lt;/span&gt;
ログイン後にコピー

为了能使用GBK,则改成:

&lt;span style=&quot;font-size:18px;&quot;&gt;htmlspecialchars($str,ENT_COMPAT,'ISO-8859-1');&lt;/span&gt;
ログイン後にコピー

1.2.一样是改程序,但可以省略一个参数。
可以在网页头部加

&lt;span style=&quot;font-size:18px;&quot;&gt;ini_set('default_charset','gbk');&lt;/span&gt;
ログイン後にコピー

然后改成:

&lt;span style=&quot;font-size:18px;&quot;&gt;htmlspecialchars($str,ENT_COMPAT,'');&lt;/span&gt;
ログイン後にコピー

文档中有写: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这个单词一直不好记。

<span style="font-size: 14px;">&lt;span style=&quot;font-size:18px;&quot;&gt;function htmlout($str) {<br>    return htmlspecialchars($str,ENT_COMPAT,'ISO-8859-1');<br>}&lt;/span&gt;</span>
ログイン後にコピー

然后去批量替换。

2.直接修改源码,重编译!这也是目前我在线上做的方案。
修改ext/standard/html.c

<span style="font-size: 14px;">&lt;span style=&quot;font-size:18px;&quot;&gt;/* Default is now UTF-8 */<br>if (charset_hint == NULL)<br>return cs_utf_8;&lt;/span&gt;</span>
ログイン後にコピー

大概在372行

把cs_utf_8改成 cs_8859_1

<span style="font-size: 14px;">&lt;span style=&quot;font-size:18px;&quot;&gt;/* Default is now UTF-8 */<br>if (charset_hint == NULL)<br>return cs_8859_1;&lt;/span&gt;</span>
ログイン後にコピー

编译后,原程序就不用做任何调整了。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

CakePHP の日付と時刻

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

CakePHP プロジェクトの構成

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

CakePHP ファイルのアップロード

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

CakePHP ルーティング

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP について話し合う

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP クイックガイド

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法

See all articles