0

在一个脚本中,我从 iconv_strlen() 函数中发现了一个错误。它尝试检查 cp1251 中字符串的 utf8-len。

$len = iconv_strlen($cp1252str, "utf-8");

我尝试使用“utf-8//IGNORE”来解决静音错误,但它不起作用。这是 iconv (//IGNORE 工作) 和 iconv_strlen (//IGNORE 不工作) 的示例

<?php
$cp1252str = '';

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

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

输出:

PHP 通知:iconv_strlen():在第 9 行的 /home/user/tmp/test.php 中的输入字符串中检测到非法字符 PHP 堆栈跟踪:PHP 1. {main}() /home/user/tmp/test.php :0 PHP 2. iconv_strlen() /home/user/tmp/test.php:9

我怎样才能忽略这个错误?只有 @?

4

1 回答 1

0

在https://bugs.php.net/bug.php?id=71346&edit=2上获得答案

这是因为 iconv_strlen() 中的 charset 参数用于输入字符串,而 "//IGNORE" 标志仅用于转换期间的输出字符集,在 iconv() 调用中。

“//IGNORE”表示输出字符集中不能表示的字符将被丢弃。但是在您的情况下,您给出的输入字符串是无效的 UTF-8,并告诉 iconv_strlen() 它是用 UTF-8 字符集编码的,因此您正确地收到了输入字符串包含非法字符的通知。

于 2016-01-22T11:12:04.213 回答