iconv_strlen() - // IGNORE不起作用

时间:2016-01-11 10:04:18

标签: php encoding iconv strlen libiconv

在一个脚本中,我从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

如何将此错误静音?只有@?

1 个答案:

答案 0 :(得分:0)

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

  

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

     

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