【发布时间】:2014-03-09 07:06:09
【问题描述】:
首先,我不得不说;我是多语言转换的陌生人。
我有字符串,如果可能的话,我想以 UTF-8 格式转换为 mb_lowercase(比如干净的 url),我使用
$str = iconv("UTF-8", "ASCII//TRANSLIT", utf8_encode($str));
$str = preg_replace("/[^a-zA-Z0-9_]/", "", $str);
$str = mb_strtolower($str);
满足我的要求(UTF8,小写字符串)
但是,当我使用 CocoaRestClient 使用“çokGüŞelLl”强调该功能时;我得到 à as $str(感谢我的客户?)并且 iconv 触发错误,抱怨输入字符串 (Ã) 中有非法字符。
iconv 有什么问题? str 已经被utf8_encode($str) 编码为utf8。怎么可能是非法字符?
注意事项: 我在这里阅读了有关@iconv 的问题,但我认为拥有空数据库条目并不是一个好的解决方案。
感谢所有答案,我会阅读并尝试理解它们。
【问题讨论】:
-
您的输入不是 UTF-8。如果您真的使用
utf_encode()创建它,那么您的原始文本可能不是ISO-8859-1。 -
我的输入 ÇokGüŞelLl 是 UTF 8(在 MySQL 中也保存了 UTF8-general),返回结果也是一样的。但是我不知道那件事。我也在实际代码中使用了确切的代码。
-
如果您将数据存储为 UTF-8,而您需要数据为 UTF-8,为什么要从 ISO-8859-1 转换?您可以使用bin2hex 了解您的实际字节数。
-
他们的键盘不写任何东西,浏览器以编码方式提交它,所有现代浏览器都默认为utf-8,除非你用@改变它987654325@ 表单上的属性。
-
例如 Drupal 总是将
accept-charset设置为UTF-8,如果您的用户使用完全损坏的客户端,您也可以这样做。