テキストフィルタリングに使用するPHPコードがいくつかあります。フィルタリング中、アンパサンド (&) やチルダ (~) などの一部の ASCII 文字は、一時的に下位 ASCII 文字 (10 進コードポイント 4 および 5 など) に変換されます。最終的なフィルタリングされた出力が生成される直前に、変換が元に戻されます。
$temp = str_replace(array('&', '~'), array("\x04", "\x05"), $input);
... some filtering code to work with $temp ...
$out = str_replace(array("\x04", "\x05"), array('&', '~'), $temp);
これは、UTF-8 や ISO 8859-1 などの 8 ビット コード単位を使用する文字エンコーディングの入力テキストでうまく機能します。しかし、UTF-16 や UTF-32 などのより大きなコード単位でエンコードされた入力についてはよくわかりません。最初の変換ステップは、入力テキストの整形式を台無しにしますか? 入力の既存の文字が原因で、復帰ステップ中に競合が発生しますか? PHP セットアップは、マルチバイト文字列関数をオーバーロードしません。
誰でもコメントできますか?ありがとう。