【发布时间】:2021-05-09 00:37:32
【问题描述】:
对于用户代理和图像 EXIF 数据,我的系统尝试使用 iconv() 转换任何 UTF-8 字符。
但是,有时我会收到以下错误:
PHP 警告 [8]: iconv(): 检测到输入字符串中的非法字符
例如:
iconv('UTF-8', 'ASCII//TRANSLIT', 'Mozilla/5.0 (iPhone; CPU OS 10_15_5 (Ergänzendes Update) like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 Mobile/14E304 Safari/605.1.15');
iconv('UTF-8', 'ASCII//TRANSLIT', 'Ïðîãðàììà öèôðîâîé îáðàáîòêè èçîáðàæåíèé êîìïàíèè ACD Systems');
结果变成了一个空字符串。
但是,当我复制上述内容并手动运行(在同一台服务器上)时,它可以工作...我没有收到任何错误,并且字符转换为“?”。
多年来我一直在尝试许多不同的东西,例如不同的编码,使用“IGNORE”而不是“TRANSLIT”,使用mb_convert_encoding,等等...
但是,如果我无法捕获导致问题的真实输入,并且我不知道我能做些什么来“修复”这个问题,那么调试/修复这个真的很难。
我该怎么做,以便将whatever输入提供给iconv(),任何非ASCII字符都将被转换为问号,而不会失败?
【问题讨论】:
-
您想要 1960 年的 7 位 ASCII,还是想要特定的 8 位 ASCII,例如
ISO-8859-1?对于其他有帮助的人,请尝试将$s = "\u{2021}"与iconv('UTF-8', 'ASCII//TRANSLIT', $s)一起使用,这对我来说会抛出。对于 OP,我不认为//TRANSLIT保证?,只是会发生“类似的事情,取决于操作系统”。当我通过mb_convert_encoding($s, 'ASCII')运行我的示例字符串时,它似乎是正确的并且永远不会抛出。
标签: php apache utf-8 iconv php-7.4