0

PHP で UTF-8 を使用しようとすると、自分のサイトで出力が問題ないように見えます (テスト時に正しい äöüß などを表示します) が、単純な問題があります... 使用するecho strlen("Ä");と「2」と表示されます... 読みましたこのトピック: strlen() と UTF-8 エンコーディング 回答で私はこれを読みました:

多くの場合、UTF-8 デコーダーが有効な UTF-8 データではないデータを読み取ると、置換文字が挿入されます。

私のデータが有効な UTF-8 ではないのはなぜですか? なぜなら:

  • すべてのファイルを「UTF-8 no BOM」で保存しました
  • 最初の行に UTF-8 ヘッダーを使用
  • 私のブラウザにも「エンコーディング:UTF-8」と表示されます

これは私のコードです:

<?php
header("Content-Type: text/html; charset=utf-8");

$test = 'Ä';
echo strlen($test);
var_dump($test);

?>

私の質問: UTF-8 で通常の PHP 関数を使用できますか、それとも「mb」関数を使用する必要がありますか?

通常の PHP 関数を使用できる場合、コードで strlen() を 1 ではなく 2 と表示するのはなぜですか?

4

1 に答える 1

3

strlen()文字列ではなく、デフォルトで文字列の長さをバイト単位で返します... mbstring.func_overload ini 設定を設定して、代わりに strlen() 呼び出しから文字を返すように PHP に指示することで、これを変更できます....しかし、これはグローバルです、strpos()およびなどの他の多くの機能にも影響しますsubstr()(ドキュメントリンクの完全なリスト)

これは、コードの他の場所に深刻な悪影響を与える可能性があります。特に、それを認識していないサードパーティのライブラリを使用している場合は、お勧めできません。

UTF-8 文字列で作業していることがわかっている場合は、関数を使用するmb_*ことをお勧めします...そして (それに関しては) を設定すると、通常の文字列関数の代わりに関数mbstring.func_overloadを使用するように PHP に指示するだけです。mb_*フード"

于 2015-07-14T10:11:33.857 に答える