1

htmlspecialchars()は、次のような特殊文字を変換しているようです: āķūņūķīそれぞれのエンティティ番号に:

ā ķ ū ņ ū ķ ī

次のように、翻訳されていないものもあります。

žš

これらのアルファベットタイプの文字を翻訳しないようにしたいhtmlspecialchars()(または他の関数) ...( php.netのマニュアルに示されているように)次の文字のみを翻訳するようにします。

  1. ' '(アンパサンド)は'&'になります
  2. ' " '(二重引用符)は'"'になります ENT_NOQUOTESが設定されていない場合。
  3. " ' "(一重引用符)は'''になります ENT_QUOTESが設定されている場合のみ。
  4. ' < '(未満)は'&lt;'になります
  5. ' > '(より大きい)は'&gt;'になります

これが必要な理由は、POSTリクエストの後、このユーザー入力を実行してhtmlspecialchars()から、新しいHTML入力のセットに戻すためです。&、 "、'、<、>などの文字は、表示エラーなどが発生しないように変換する必要があります。ただし、' āķūņūķī 'などの特殊文字は変更しないでください。そうしないと、ユーザーは非常に混乱します。

4

2 に答える 2

5

3 番目のパラメーターを次のように設定しますUTF-8

echo htmlentities('āķūņūķī', ENT_QUOTES, 'UTF-8');

のデフォルトのエンコーディングhtmlspecialcharsISO-8859-1.

テストケース:

var_dump(htmlentities('āķūņūķī'));
var_dump(htmlentities('āķūņūķī', ENT_QUOTES, 'UTF-8'));

出力:

string(84) "&Auml;�&amp;Auml;&middot;&Aring;&laquo;&Aring;�&amp;Aring;&laquo;&Auml;&middot;&Auml;&laquo;"
string(14) "āķūņūķī"

http://codepad.org/MCaDosQ5

于 2012-05-08T01:48:10.293 に答える
0

255 より大きい Unicode 値を持つ文字は、正しく処理されるように数値表現に変換する必要があります。

あなたが言及した2文字が変換されない理由は、それらが1バイトとして表現できるUnicode値を持っているためです。256 より大きい値を持つその他の文字には、複数のバイトが必要です。

受信側のデコードについては、 をご覧くださいhtmlspecialchars_decode。ドキュメントは PHP Web サイト -- htmlspecialchars_decode マニュアル ページにあります。

于 2012-05-08T01:43:46.093 に答える