34

ページに英語以外/外国語のテキストがありますが、小文字にしようとすると、文字がクエスチョン マークを含む黒いひし形に変換されます。

$a = "Երկիր Ավելացնել";
echo $b = strtolower($a);
//returns  ����� ���������

文字セットをメタタグに設定しましたが、これで修正されませんでした。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

文字列を壊さずに小文字に変換するにはどうすればよいですか?

4

8 に答える 8

74

mb_strtolower() を使ってみましたか?

于 2010-03-25T14:47:33.110 に答える
22

PHP5 は UTF-8 と互換性がないため、mb 拡張子に頼る必要があります。mb の内部エンコーディングを utf-8 に設定することをお勧めします。そうすれば、常に文字セットを指定せずにその関数を自由に使用できます。

mb_internal_encoding('UTF-8');

...

$b = mb_strtolower($a);
echo $b;
于 2010-03-25T14:49:11.997 に答える
10

私はここからこの解決策を見つけました

$string = 'Թ';
echo 'Uppercase: '.mb_convert_case($string, MB_CASE_UPPER, "UTF-8").'';
echo 'Lowercase: '.mb_convert_case($string, MB_CASE_LOWER, "UTF-8").'';
echo 'Original: '.$string.'';

私のために働く(小文字)

于 2012-07-26T11:53:26.547 に答える
5

やってみました

http://www.php.net/manual/en/function.mb-strtolower.php

mb_strtolower() で、エンコーディングを 2 番目のパラメーターとして指定しますか?

そのページの例は機能しているようです。

あなたも試すことができます:

$str = mb_strtolower($str, mb_detect_encoding($str));
于 2010-03-25T14:48:55.010 に答える
3

Php はデフォルトで utf-8 を認識しません。すべての文字列が ASCII であると想定されるため、strtolower は、大文字 AZ のコードを含むバイトを小文字 az のコードに変換します。UTF-8 の非 ASCII 文字は 2 バイト以上で記述されるため、strtolower は各バイトを個別に変換し、そのバイトに A ~ Z の文字に等しいコードが含まれている場合は変換されます。その結果、シーケンスが壊れ、正しい文字を表すことができなくなります。

これを変更するには、mbstring 拡張機能を構成する必要があります。

http://www.php.net/manual/en/book.mbstring.php

strtolower を mb_strtolower に置き換えるか、mb_strtolower direclty を使用します。いずれにせよ、要件に合わせて mbstring 設定を構成するには、少し時間を費やす必要があります。

于 2010-03-25T14:53:50.697 に答える
2

strtolower はマルチバイト文字では機能しないため、代わりにmb_strtolowerを使用してください。

于 2010-03-25T14:48:12.980 に答える
1

ロケールを設定する必要があります。http://ca3.php.net/manual/en/function.strtolower.phpで最初の例を参照してください

于 2010-03-25T14:51:03.300 に答える
1

strtolower() は、現在選択されているロケールでのみ変換を実行します。

mb_convert_case()を試してみます。エンコーディングを明示的に指定してください。

于 2010-03-25T14:49:10.333 に答える