2

こんにちは、問題です: $_POST ラテン文字列 strilen() に到達すると完全に機能しますが、キリル文字列 strlen() を取得するとその値が 2 倍になります。コードは次のとおりです。

$word = $_POST['word'];
echo strlen($word) . '<br>'; //input: abc -> returns 3, input: абв -> returns 6 
var_dump($word); //input: abc -> returns string 'abc' (length=3), input: абв -> returns string 'абв' (length=6)

何かアイデアはありますか?!

4

3 に答える 3

14

strlen何も倍増しません。状況が何であるかを報告するだけです。具体的には、文字列を構成するバイト数(文字数ではなく) を報告します。それはstrlen、「文字」が何であるかの知識がなく、盲目的に 1 バイト = 1 文字と想定しているからです。strlenしたがって、「マルチバイト対応ではない」と言います。

あなたの場合、ブラウザは UTF-8 でエンコードされたデータをサーバーに送信しているようです。UTF-8 では、キリル文字は 1 文字あたり 2 バイトです。

文字列の文字数を知りたい場合は、 multibyte-aware を使用してmb_strlenください:

echo mb_strlen($word, 'UTF-8');
于 2013-02-11T23:11:56.313 に答える
4

mb_strlen()マルチバイト文字を扱っている場合は試してみてください。

http://php.net/manual/en/function.mb-strlen.php

于 2013-02-11T23:12:18.207 に答える
1

長さを (バイトではなく) 文字単位で取得したい場合は、マルチバイト版の strlen を使用してください: mb_strlen: http://php.net/manual/en/function.mb-strlen.php

于 2013-02-11T23:13:33.273 に答える