Проблемы с функцией strtolower
У меня есть текст на иностранном языке на моей странице, но когда я делаю его строчными, он начинает выглядеть так...
$a = "Երկիր Ավելացնել";
echo $b = strtolower($a);
//returns ����� ���������
я поставил <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
не могли бы вы сказать мне, почему? заранее спасибо
8 ответов
PHP5 не совместим с UTF-8, поэтому вам все равно нужно прибегнуть к расширению mb. Я предлагаю вам установить внутреннюю кодировку mb в utf-8, а затем вы можете свободно использовать ее функции, не указывая кодировку постоянно:
mb_internal_encoding('UTF-8');
...
$b = mb_strtolower($a);
echo $b;
Я нашел это решение отсюда
$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.'';
работает для меня (нижний регистр)
Ты пытался
http://www.php.net/manual/en/function.mb-strtolower.php
mb_strtolower () и указав кодировку в качестве второго параметра?
Примеры на этой странице работают.
Вы также можете попробовать:
$str = mb_strtolower($str, mb_detect_encoding($str));
Php по умолчанию не знает про utf-8. Предполагается, что любая строка является ASCII, поэтому strtolower преобразует байты, содержащие коды прописных букв AZ, в коды строчных букв az. Поскольку буквы UTF-8, отличные от ascii, пишутся двумя или более байтами, strtolower преобразует каждый байт отдельно, и если в байте содержится код, равный буквам AZ, он преобразуется. В результате последовательность нарушается, и она больше не представляет правильный символ.
Чтобы изменить это, вам нужно настроить расширение mbstring:
http://www.php.net/manual/en/book.mbstring.php
заменить strtolower на mb_strtolower или использовать mb_strtolower direclty. В любом случае вам нужно потратить некоторое время на настройку параметров mbstring в соответствии с вашими требованиями.
Вместо этого используйте http://php.net/mb_strtolower, так как strtolower не работает с многобайтовыми символами.
strtolower() выполнит преобразование только в выбранной локали.
Я бы попробовал mb_convert_case (). Убедитесь, что вы явно указали кодировку.
Вам нужно будет установить локаль; см. первый пример на http://ca3.php.net/manual/en/function.strtolower.php