1

はhtmlspecialchars()のような特殊文字を変換するように見える次のそれぞれのエンティティの数に āķūņūķīはhtmlspecialchars()は、他の特殊文字を変換さ

&#257。 ķ ū ņ ū ķ ī に私はhtmlspecialchars()(またはいくつかの他の機能を)希望

ZS

ないそれだけで変換できるよう...文字のこれらのアルファベット順の種類を翻訳:

いくつかのような非翻訳ままであるが(php.net manualに示すように見えるよう)以下:

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

私はPOSTリクエストの後、私は、HTMLの入力の新しいセットに戻ってそれを置く前htmlspecialchars()を通じて、このユーザ入力を実行していますので、これは必要な理由。キャラクターのような&、 "、 '、< 、>、は表示エラーなどを引き起こさないように変換する必要がありますが、 'āķūņūī' 'のような特殊文字は変更されません。それ以外の場合、ユーザーは非常に混乱します。

+1

'htmlspecialcharは()' 3番目のパラメータは、エンコーディングをサポートしていますよ、多分これは役立ちます。 – ccKep

答えて

5

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

htmlspecialcharsのデフォルトエンコーディングがISO-8859-1です。

テストケース:

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

出力:

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

http://codepad.org/MCaDosQ5

0

ユニコード値が255より大きい文字は、正しく処理されるように数値表現に変換する必要があります。

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

受信側のデコードについてはhtmlspecialchars_decodeをご覧ください。あなたは、PHPのウェブサイト上のドキュメントを見つけることができます - UTF-8ように、第3のパラメータを設定しhtmlspecialchars_decode manual page