7

私はワードプレスのウェブサイトを持っています。

次のような単純なページ テンプレートを作成しました。

<?php 
 /**
 * Template Name: Test
 */

 echo strlen('Привет');

 ?>

次に、このテンプレートを使用してページを作成しました。このページには、ロシア語の文字列「Привет」(「こんにちは」を意味する)の長さが表示されます。6 文字で構成される UTF-8 でエンコードされたロシア語文字列のサイズは 12 バイトである必要があるため、12 が表示されると予想されますが、代わりに 6 が表示されます。

私は他のサーバーで同じことをテストし、正しい値 - 12 を持っていました。その理由は私のサーバー構成にあると思います。wp 3.2.1 (wp 3.5.1 にアップグレードした後も同じ問題が発生しました) と PHP 5.3.3 を使用しています。

現在、解決策を見つけるために約 5 日間を費やしてきましたが、うまくいきません。そのような行動の理由を知っている人はいますか?

4

5 に答える 5

8

のmbstring.func_overload設定を確認してくださいphp.ini。このオプションにより、PHP は strlen() 関数を mb_strlen() でオーバーライドできます (他の同等の関数についても同様です)。これにより、サーバー間の不一致が説明される可能性があります

編集

ドキュメントリンクからの引用:

関数のオーバーロードを使用するには、php.ini の mbstring.func_overload を、オーバーロードする関数のカテゴリを指定するビットマスクの組み合わせを表す正の値に設定します。mail() 関数をオーバーロードするには、1 に設定する必要があります。文字列関数の場合は 2、正規表現関数の場合は 4。たとえば、7 に設定すると、メール、文字列、および正規表現関数がオーバーロードされます。

したがって、2 bitset の値は、基本的な文字列関数が同等の mbstring でオーバーロードされますが、メールまたは正規表現関数ではオーバーロードされないことを意味します。動作が必要な場合normal、これは 0 にする必要があります

于 2013-03-11T15:32:37.180 に答える
2

http://lt.php.net/manual/en/function.mb-strlen.phpを試しましたか?

int mb_strlen ( string $str [, string $encoding ] )
Gets the length of a string.
于 2013-03-11T15:29:43.207 に答える
0

これにはマルチバイト文字列関数を使用する必要がありますか? http://www.php.net/manual/en/function.mb-strlen.phpなど

于 2013-03-11T15:30:23.550 に答える
0

マルチバイト文字で文字列の長さを取得する方法の詳細については、http://php.net/manual/en/function.mb-strlen.phpを参照してください。

于 2013-03-11T15:31:48.630 に答える