我的页面中有一些外文文字, 但当我把它设为小写时,它开始看起来像这样......
$a = "Երկիր Ավելացնել";
echo $b = strtolower($a);
//returns ����� ���������
我设置了<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
你能告诉我为什么吗?
提前谢谢
答案 0 :(得分:54)
你尝试过使用mb_strtolower()吗?
答案 1 :(得分:18)
PHP5不兼容UTF-8,因此您仍需要使用mb扩展名。我建议你将mb的内部编码设置为utf-8,然后你可以自由使用它的函数而不必一直指定字符集:
mb_internal_encoding('UTF-8');
...
$b = mb_strtolower($a);
echo $b;
答案 2 :(得分:9)
我从here
找到了这个解决方案$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.'';
适合我(小写)
答案 3 :(得分:5)
你试过吗
http://www.php.net/manual/en/function.mb-strtolower.php
mb_strtolower()并将编码指定为第二个参数?
该页面上的示例似乎有效。
您也可以尝试:
$str = mb_strtolower($str, mb_detect_encoding($str));
答案 4 :(得分:3)
默认情况下,Php不知道utf-8。它假设任何字符串都是ASCII,因此strtolower将包含大写字母A-Z代码的字节转换为小写字母a-z的代码。由于UTF-8非ascii字母用两个或多个字节写入,strtolower分别转换每个字节,如果字节恰好包含等于字母A-Z的代码,则转换它。在结果中,序列被破坏,它不再代表正确的字符。
要更改此设置,您需要配置mbstring扩展名:
http://www.php.net/manual/en/book.mbstring.php
用mb_strtolower替换strtolower或使用mb_strtolower direclty。无论如何,您需要花一些时间来配置mbstring设置以满足您的要求。
答案 5 :(得分:2)
使用mb_strtolower代替,因为strtolower不适用于多字节字符。
答案 6 :(得分:1)
strtolower()将仅在当前选定的区域设置中执行转换。
我会尝试mb_convert_case()。确保明确指定编码。
答案 7 :(得分:0)
您需要设置区域设置;请参阅http://ca3.php.net/manual/en/function.strtolower.php
上的第一个示例