0

テキストフィルタリングに使用する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 セットアップは、マルチバイト文字列関数をオーバーロードしません。

誰でもコメントできますか?ありがとう。

4

1 に答える 1

1

str_replace は、渡されたすべての文字列が同じエンコーディングである限り、正常に機能します。データのバイナリ比較/置換を行うだけなので、実際のエンコーディングは重要ではありません。

そのため、このリストには mb_str_replace がありません。

于 2012-09-15T08:45:00.660 に答える