4

これを見てください:

$str = '¡hola!'; // '¡' is the spanish opening exclamation mark

echo $str{0}; // prints nothing
echo $str{1}; // prints �
echo $str{2}; // prints h

PHPスクリプトにはUTF-8エンコーディングがあり、ApacheモジュールまたはCLIとして実行すると同じ結果が得られます。PHP バージョン: 5.4.6

この奇妙な結果が得られるのはなぜですか?

4

2 に答える 2

4

[]またはによる文字列のインデックス付けは、{}マルチバイトセーフではありません。

代わりに、mb_substrなどのマルチバイト関数を使用してください

于 2013-01-08T16:50:52.507 に答える
2

これは、実際には ¡ が UTF のマルチバイト文字であり、PHP が配列アクセス ( [0]) を介して適切に処理できないためです。代わりに、マルチバイト関数を調べてください: http://php.net/manual/en/book.mbstring.php

これは期待どおりに機能するはずです。

$str = '¡hola!';

echo mb_substr($str, 0, 1, 'UTF-8'); // prints ¡
echo mb_substr($str, 1, 1, 'UTF-8'); // prints h
echo mb_substr($str, 2, 1, 'UTF-8'); // prints o
于 2013-01-08T16:54:56.653 に答える