PHPプログラミングでは、 Stripos()は非常に一般的な文字列検索機能です。これは、ターゲット文字列内の文字列の最初の発生をケース感度なしに見つけるために使用されます。多くの開発者は、中国のコンテンツを含む多言語または文字列を扱う際に1つの問題を心配するかもしれません。
この記事では、この問題について説明し、サンプルコードを介して検証します。
StripoS()の関数署名は次のとおりです。
int|false stripos(string $haystack, string $needle, int $offset = 0)
$ heedleが最初に$ haystack (0から始まる)に表示される位置を返し、見つからない場合はfalseを返します。この関数は、ケースに敏感ではありません。
$haystack = "Hello World!";
$needle = "world";
$pos = stripos($haystack, $needle);
echo $pos; // 出力 6
重要な質問は、 $ haystackまたは$針が中国語を含むときにStripos()を正確に一致させることができますか?
答えは次のとおりです。それは正常に一致する可能性がありますが、文字列のエンコードに注意してください。
PHPのStripOS()は、文字レベルに基づいてバイトに基づいて一致します。つまり、 spripos()を使用してUTF-8エンコードされた中国の弦を処理する場合、 $針が中国語である場合、または$ haystackに漢字が含まれている場合、エンコードが一貫している限り、通常は問題ありません。
いくつかの例を使用して、中国語の一致の動作をテストしましょう。
// UTF-8 エンコードされた文字列
$haystack = "訪問してください m66.net Webサイト";
$needle = "m66.net";
// 英語を見つけてください
$pos = stripos($haystack, $needle);
echo $pos !== false ? "見つかった,場所はです:$pos" : "見つかりません"; // 出力:見つかった,場所はです:5
// 中国語を見つけてください
$haystack = "訪問してください m66.net Webサイト";
$needle = "Webサイト";
$pos = stripos($haystack, $needle);
echo $pos !== false ? "見つかった,場所はです:$pos" : "見つかりません"; // 出力:見つかった,場所はです:15
ご覧のとおり、 Stripos()は通常、英語を検索しているのか中国語を探しています。
Stripos()は通常、中国語に対処するのに問題はありませんが、まだいくつかの点があります。
文字列エンコードが一貫していることを確認してください:PHPはデフォルトでバイトで一致します。 $ haystackがUTF-8および$針がGB2312およびその他のエンコード形式である場合、一致する障害を引き起こす可能性があります。
マルチバイト文字列を処理するときにMB_STRIPOS()を使用することをお勧めします。特に東アジアのキャラクター(中国、日本、韓国)をより安全に処理する必要がある場合は、 MB_STRIPOS ()を使用することをお勧めします。
例:
$haystack = "訪問してください m66.net Webサイト";
$needle = "Webサイト";
$pos = mb_stripos($haystack, $needle, 0, 'UTF-8');
echo $pos !== false ? "見つかった,場所はです:$pos" : "見つかりません";
StripOS()を使用して、中国語を含む文字列に特定のサブストリングが含まれているかどうかを判断してください。エンコーディングが正しい場合は一致エラーが発生しません。ただし、多言語の互換性を向上させるには、プロジェクトでMB_STRIPOS()を使用することをお勧めします。
いずれにせよ、不必要な面倒を避けるために、常に弦を均一にエンコード(通常はUTF-8)に保ちます。