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() 并将编码指定为第二个参数?

该页面上的示例似乎有效。

你也可以试试:

$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 字母是用两个或更多字节编写的,strtolower 会单独转换每个字节,如果字节恰好包含等于字母 AZ 的代码,则将其转换。结果序列被破坏,不再代表正确的字符。

要更改这一点,您需要配置 mbstring 扩展:

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

用 mb_strtolower 替换 strtolower 或直接使用 mb_strtolower。无论如何,您需要花一些时间来配置 mbstring 设置以满足您的要求。

于 2010-03-25T14:53:50.697 回答
2

请改用mb_strtolower,因为 strtolower 不适用于多字节字符。

于 2010-03-25T14:48:12.980 回答
1

strtolower() 将仅在当前选定的语言环境中执行转换。

我会尝试mb_convert_case()。确保明确指定编码。

于 2010-03-25T14:49:10.333 回答
1

您将需要设置语言环境;请参阅http://ca3.php.net/manual/en/function.strtolower.php的第一个示例

于 2010-03-25T14:51:03.300 回答