php unicode转ascii,php – 将Unicode字符转换为等效的ASCII字符

为了索引和搜索,我需要“展平”许多Unicode字符串.例如,我需要将GötheФ€转换为ASCII.最后两个字符在ASCII中没有密切的表示,因此可以完全丢弃它们.所以我期待的

echo iconv("UTF-8", "ASCII//TRANSLIT//IGNORE", "GötheФ€");

是Gothe,但它输出Gothe?EUR.

除了字母之外,我还喜欢各种各样的Unicode数字和标点符号,例如句点,逗号,短划线,斜线等等,用它们最接近的ASCII对应物替换,这是ASCII // TRANSLIT // IGNORE在iconv函数中已经但不是没有为Unicode字符生成一些垃圾输出,因为它无法找到任何ASCII替换.我希望这些角色完全被忽略.

如何获得预期的结果?有没有更好的方法,也许使用intl库?

解决方法:

你选择了一个难题.最好告诉用户输入Unicode字符以自己音译ASCII.为他们做这件事只会在他们不同意你的音译时打乱他们.

无论你使用什么音译策略,你都不会取悦所有人,因为不同的人对不同的角色规定了不同的含义.让一个人高兴的音译会激怒另一个人.除非你让每个人在Unicode中使用他们想要的任何字符,否则你不会让每个人都开心.

但是生活很刺耳,令人反感,所以我们走了:

这个PHP代码:

function toASCII( $str )

{

return strtr(utf8_decode($str),

utf8_decode(

'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ'),

'SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy');

}

上面的PHP函数所做的是替换utf8_decode的第一个参数中的每个Unicode字符,并将其替换为utf8_decode的第二个参数中的相应字符.

例如,UnicodeÀ被音译为ASCII A,并且å被转换为a.您必须为您认为音译为ASCII字符的每个Unicode字符指定此字符.对于其他人,删除它们或通过另一个音译算法运行它们.

您将需要查看95,221个其他字符,这些字符可能会音译为ASCII.它成为“何时不再是A?”的存在主义游戏.那个看起来像A的Klingon角色和路线图标志怎么样?鱼的性格看起来像一个.谁说什么是什么?

这是很多工作,但如果你正在清理数据库输入,你必须创建一个白色的字符列表并阻止其他野蛮人,让他们在护城河,这是唯一可靠的方式.

标签:transliteration,iconv,php,unicode,character-encoding

来源: https://codeday.me/bug/20190901/1781816.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值