在一个脚本中,我从iconv_strlen()函数中创建了一个错误。它尝试在cp1251中检查字符串的utf8-len。
$len = iconv_strlen($cp1252str, "utf-8");
我尝试使用“utf-8 // IGNORE”来进行静音错误,但它不起作用。以下是iconv(// IGNORE work)和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
如何将此错误静音?只有@?
答案 0 :(得分:0)
获得答案 https://bugs.php.net/bug.php?id=71346&edit=2
那是因为iconv_strlen()中的charset参数适用于 输入字符串,而“// IGNORE”标志仅用于 转换期间的输出字符集,在iconv()调用中。
“// IGNORE”表示无法在中表示的字符 输出字符集将被丢弃。但在你的情况下,你给的是 输入字符串是无效的UTF-8,并告诉iconv_strlen()它 在UTF-8字符集中编码,因此您正确地接收了一个 请注意您的输入字符串包含非法字符。