iconv - 在输入字符串中检测到非法字符

2022-08-30 11:25:48

我没有看到任何非法的东西 - 关于可能是什么问题的任何建议?

    if (strtolower($matches[1]) != 'utf-8') {
        var_dump($matches[1]);
        $xml = iconv($matches[1], 'utf-8', $xml);
        $xml = str_replace('encoding="'.$matches[1].'"', 'encoding="utf-8"', $xml);
    }

以下是我的调试/错误

string(12) "windows-1252"
Notice (8): iconv() [http://php.net/function.iconv]: Detected an illegal character in input string [APP/models/sob_form.php, line 16]

我已经验证了上面的代码确实是第16行


答案 1

但是,如果您使用了已接受的答案,则如果输入字符串中的某个字符无法音译,您仍将收到 PHP 通知:

<?php
$cp1252 = '';

for ($i = 128; $i < 256; $i++) {
    $cp1252 .= chr($i);
}

echo iconv("cp1252", "utf-8//TRANSLIT", $cp1252);

PHP Notice:  iconv(): Detected an illegal character in input string in CP1252.php on line 8

Notice: iconv(): Detected an illegal character in input string in CP1252.php on line 8

因此,您应该使用 IGNORE,它将忽略无法音译的内容:

echo iconv("cp1252", "utf-8//IGNORE", $cp1252);

答案 2

非法字符不在 中,而是在$matches[1]$xml

尝试

iconv($matches[1], 'utf-8//TRANSLIT', $xml);

向我们显示输入字符串对于更好的答案会很好。


推荐