最も厄介な問題は htmlspecialchars ではないかと思います。もちろん htmlentities も影響を受けますが、中国語の Web サイトでは htmlspecialchars を使用するのが一般的であり、htmlentities はほとんど使用されません。
おそらく外国人は、Web ページは通常 utf-8 でエンコードされるべきだと考えているので、GB2312、GBK エンコードを使用する中国の Web サイトに悩まされているのかもしれません...!
具体的なパフォーマンス:
コードをコピーします コードは次のとおりです:
$str = "9enjoy.com の php バージョンは 5.2.10";
echo htmlspecialchars($str);
gbk 文字セットでの出力は空です...utf-8 では、出力は正常です。
その理由は、5.4.0 でのこの関数の変更にあります。
コードをコピーします コードは次のとおりです:
5.4.0 エンコーディングパラメータのデフォルト値がUTF-8に変更されました
それが何だった?
コードをコピーします コードは次のとおりです:
string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = 'UTF-8' [, bool $double_encode = true ]]] )
変換に使用されるエンコーディングを定義します。省略した場合、この引数のデフォルト値は、PHP 5.4.0 より前のバージョンでは ISO-8859-1、PHP 5.4.0 以降では UTF-8 です。
ISO-8859-1 であることが判明しましたが、5.4 以降はデフォルトで utf-8 になりました。この関数を中国語で使用すると、出力は空白になります。
1. htmlspecialchars を使用するすべてのプログラムを修正するよう努めます
1.1 2 番目の $flags パラメータのデフォルトは ENT_COMPAT なので、
に変更されます
コードをコピーします コードは次のとおりです:
htmlspecialchars($str,ENT_COMPAT,'GB2312');
なぜGBKではないのでしょうか? GBK パラメータがないため、強制的に GBK を使用すると、エラーが報告されます:
コードをコピーします コードは次のとおりです:
警告: htmlspecialchars(): utf-8 を想定した場合、文字セット `gbk' はサポートされていません
GBK を使用するには、次のように変更します:
コードをコピーします コードは次のとおりです:
htmlspecialchars($str,ENT_COMPAT,'ISO-8859-1');
1.2. 同じ手順を変更しますが、パラメータを 1 つ省略できます。
ウェブページの先頭に
を追加できます
コードをコピーします コードは次のとおりです:
ini_set('default_charset','gbk');
次に、それを
に変更します
コードをコピーします コードは次のとおりです:
htmlspecialchars($str,ENT_COMPAT,'');
ドキュメントには次のように記載されています: 空の文字列は、スクリプト エンコーディング (Zend マルチバイト)、default_charset、現在のロケール (nl_langinfo() および setlocale() を参照) からの検出をこの順序で有効にします。
一般的な意味は次のとおりです: 空の文字列が渡されると、default_charset のエンコーディングが使用されます
1.3. 関数をカプセル化する... htmlspecialchars という単語はいつも覚えにくいです。
コードをコピーします コードは次のとおりです:
関数 htmlout($str) {
戻り値 htmlspecialchars($str,ENT_COMPAT,'ISO-8859-1');
}
次に一括置換に進みます。
2. ソースコードを直接変更して再コンパイルします。これは私が現在オンラインで取り組んでいる計画でもあります。
372行目について
コードをコピーします コードは次のとおりです:
/* デフォルトは UTF-8 になりました */
if (charset_hint == NULL)
cs_utf_8 を返します;
cs_utf_8 を cs_8859_1 に変更します
コードをコピーします コードは次のとおりです:
/* デフォルトは UTF-8 になりました */
if (charset_hint == NULL)
cs_8859_1 を返す;
コンパイル後、元のプログラムを調整する必要はまったくありません。
インストール方法については、http://www.bkjia.com/article/63388.htmを参照してください
Windows では何をすればよいですか?これを自分でコンパイルする方法を見つけてみましょう、なかなか難しいです…
彼の言葉を引用すると、コーヒーとコーラを用意してください、準備をしてください、何時間もかかるかもしれません...
http://www.bkjia.com/PHPjc/978728.html