проблемы с функцией strtolower - PullRequest
25 голосов
/ 25 марта 2010

у меня есть текст на иностранном языке на моей странице, но когда я делаю его строчными, он начинает выглядеть так ...


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

я установил <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> не могли бы вы сказать мне, почему? заранее спасибо

Ответы [ 8 ]

55 голосов
/ 25 марта 2010

Вы пробовали использовать mb_strtolower ()?

18 голосов
/ 25 марта 2010

PHP5 не совместим с UTF-8, поэтому вам все равно нужно прибегнуть к расширению mb. Я предлагаю вам установить внутреннюю кодировку mb в utf-8, а затем вы можете свободно использовать ее функции без постоянного указания кодировки:

mb_internal_encoding('UTF-8');

...

$b = mb_strtolower($a);
echo $b;
9 голосов
/ 26 июля 2012

Я нашел это решение от здесь

$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.'';

у меня работает (строчные)

5 голосов
/ 25 марта 2010

Вы пробовали

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

mb_strtolower () и указание кодировки в качестве второго параметра?

Примеры на этой странице работают.

Вы также можете попробовать:

$str = mb_strtolower($str, mb_detect_encoding($str));
3 голосов
/ 25 марта 2010

Php по умолчанию не знает о utf-8. Предполагается, что любая строка является ASCII, поэтому strtolower преобразует байты, содержащие коды заглавных букв A-Z, в коды строчных a-z. Поскольку не-ascii буквы UTF-8 пишутся двумя или более байтами, strtolower преобразует каждый байт отдельно, и если в байте содержится код, равный буквам A-Z, он преобразуется. В результате последовательность нарушается и больше не представляет правильный символ.

Чтобы изменить это, вам нужно настроить расширение mbstring:

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

чтобы заменить strtolower на mb_strtolower или использовать mb_strtolower direclty. В любом случае вам нужно потратить некоторое время на настройку параметров mbstring в соответствии с вашими требованиями.

2 голосов
/ 25 марта 2010

Используйте взамен mb_strtolower , поскольку strtolower не работает с многобайтовыми символами.

1 голос
/ 25 марта 2010

strtolower () выполнит преобразование только в выбранной локали.

Я бы попробовал mb_convert_case () . Убедитесь, что вы явно указали кодировку.

0 голосов
/ 25 марта 2010

Вам нужно будет установить локаль; см. первый пример на http://ca3.php.net/manual/en/function.strtolower.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...