strtolower功能的问题

时间:2010-03-25 14:46:16

标签: php

我的页面中有一些外文文字, 但当我把它设为小写时,它开始看起来像这样......


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

我设置了<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 你能告诉我为什么吗? 提前谢谢

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

上的第一个示例