遇到 iconv 不再音译的问题

问题描述 投票:0回答:1

此代码用于将重音字符转写为 7 位 ASCII:

    setlocale(LC_CTYPE, 'en_US_POSIX.UTF-8');
    echo iconv('UTF-8', 'US-ASCII//TRANSLIT', 'Jalapeño Café');

但是现在输出的是

Jalapeno Cafe
,而不是
Jalapeo Caf

我可以在服务器上的区域设置列表中看到

en_US_POSIX

PHP版本是7.4.10。

问题发生在经过多次实验之前和之后,我能够找到 locale 和 iconv 参数来修复它,但现在它不起作用。关于下一步该做什么有什么建议吗?

php iconv
1个回答
0
投票

当我检查

setlocale(LC_CTYPE, 'en_US_POSIX.UTF-8')
的返回值时,我得到
false
,这意味着存在错误。因此,如果这在过去似乎有效,我敢打赌在此之前还有其他事情在起作用。

您应该能够仅使用

en_US
作为区域设置。

if(false === setlocale(LC_CTYPE, 'en_US')){
    throw new \RuntimeException('Could not change the locale');
}

echo iconv('UTF-8', 'ASCII//TRANSLIT', 'Jalapeño Café');

// Jalapeno Cafe

演示:https://3v4l.org/AVQhU

© www.soinside.com 2019 - 2024. All rights reserved.