为什么 Translit 不起作用?

发布于 2024-10-18 06:54:32 字数 163 浏览 3 评论 0原文

setlocale(LC_ALL, 'en_US.UTF8');
$string= 'ṃỹṛèşưḿĕ';
echo iconv('UTF-8', 'ASCII//TRANSLIT', $string);

出错...

应该打印:myresume

setlocale(LC_ALL, 'en_US.UTF8');
$string= 'ṃỹṛèşưḿĕ';
echo iconv('UTF-8', 'ASCII//TRANSLIT', $string);

makes error...

should print: myresume

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

勿忘心安 2024-10-25 06:54:32

这取决于 iconv 库。

在 Ubuntu 10.10 中,我得到这个:

$ php -i | egrep "iconv (implementation|library)"
iconv implementation => glibc
iconv library version => 2.12.1
$ php a.php 
myresume

但在另一台使用 GNU iconv 的机器上:

iconv implementation => libiconv
iconv library version => 1.11
# php a.php 
Notice: iconv(): Unknown error (88) in /tmp/root/a.php on line 5

iconv 完成的音译在不同实现中并不一致。例如,glibc 实现将 é 音译为 e,但 libiconv 将其音译为 'e

在我们在 PHP 中支持 ICU 音译器(下一个版本)之前,不会有可靠的方法来可靠地进行这些转换(尽管如果您只想删除标记,可以使用 其他解决方案)。在 PHP 的开发版本中,使用 intl 扩展,可以执行以下操作

<?php
$t = Transliterator::create("latin; NFKD; [^\u0000-\u007E] Remove; NFC");
echo $t->transliterate('Ναδάλης ṃỹṛèşưḿĕ');

Nadales myresume

It depends on the iconv library.

In Ubuntu 10.10, I get this:

$ php -i | egrep "iconv (implementation|library)"
iconv implementation => glibc
iconv library version => 2.12.1
$ php a.php 
myresume

But on another machine using the GNU iconv:

iconv implementation => libiconv
iconv library version => 1.11
# php a.php 
Notice: iconv(): Unknown error (88) in /tmp/root/a.php on line 5

The transliteration done by iconv is not consistent across implementations. For instance, the glibc implementation transliterates é into e, but libiconv transliterates it into 'e.

Until we have support for ICU transliterators in PHP (due for the next version), there won't be a realiable way to reliable do these transformation (though if you only want to remove marks, there are other solutions). In the development version of PHP, with the intl extension, it's possible to do this:

<?php
$t = Transliterator::create("latin; NFKD; [^\u0000-\u007E] Remove; NFC");
echo $t->transliterate('Ναδάλης ṃỹṛèşưḿĕ');

which gives

Nadales myresume
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文