2

自分のサイトを utf-8 を使用するように変換した後、すべての受信 utf データを検証して、その有効性と一貫性を確保するという見通しに直面しています。

文字列が utf かどうかを検出するためのさまざまな正規表現と PHP API があるようですが、私が見たものは不完全なようです (utf を検証するが、無効な 3 番目のバイトを許可する正規表現など)。

また、長すぎるエンコード、つまりマルチバイトの utf シーケンスとしてエンコードできる ASCII 文字の検出 (および防止) についても懸念しています。

提案やリンクは大歓迎です!

4

2 に答える 2

7

mb_check_encoding()は、この目的のために設計されています:

mb_check_encoding($string, 'UTF-8');
于 2011-10-23T21:52:47.277 に答える
1

iconvシーケンスが有効な UTF-8 であるかどうかを知ることができるので、多くのことができます。

UTF-8 から同じものに変換するように指示します。

$str = "\xfe\x20"; // Invalid UTF-8
$conv = @iconv('UTF-8', 'UTF-8', $str);
if ($str != $conv) {
    print("Input was not a valid UTF-8 sequence.\n");
}

文字列の長さをバイト単位で尋ねる:

$str = "\xfe\x20"; // Invalid UTF-8
if (@iconv_strlen($str, 'UTF-8') === false) {
    print("Input was not a valid UTF-8 sequence.\n");
}
于 2011-10-23T21:50:39.287 に答える