【发布时间】:2011-02-06 00:14:14
【问题描述】:
考虑一下这个简单的代码:
echo iconv('UTF-8', 'ASCII//TRANSLIT', 'è');
打印出来
`e
而不仅仅是
e
你知道我做错了什么吗?
添加 setlocale 后没有任何变化
setlocale(LC_COLLATE, 'en_US.utf8');
echo iconv('UTF-8', 'ASCII//TRANSLIT', 'è');
【问题讨论】:
-
首先,这从根本上来说是一件邪恶且错误的事情。其次,唯一合理的方法是将您的代码渲染为由规范分解形成的 Unicode 规范化形式 D,然后使用 Mark 属性删除这些生成的代码点。当然,它不会“解决”所有问题:Tschüß
-
忽略tchris,这是这样做的方法,我在实践中使用它。您犯的唯一错误是语言环境“子类”是
setlocale(LC_CTYPE, 'en_US.UTF-8');-> LC_TYPE,而不是_COLLATE。楚斯。 -
我也遇到了同样的问题 - 当然不是 LC_TYPE... 会产生错误(至少对我而言)。我试过 LC_ALL (这是其他人所说的) - 没有效果。我输入字符串
CŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ并得到CSOEZsoez"YyenuA'A^A~A"AAAECE'E^E"EI'I^I"ID~NO'O^O~O"OOU'U^U"U'Yss@987654330 @e'e^e"ei'i^i"id~no'o^o~o"oou'u^u"u'y"y
标签: php string unicode utf-8 unicode-normalization