繁体   English   中英

iconv_strlen()-// IGNORE不起作用

[英]iconv_strlen() - //IGNORE not work

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

我该如何消除此错误? 只有 @?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM