【问题标题】:iconv_strlen() - //IGNORE not workiconv_strlen() - //忽略不工作
【发布时间】:2016-01-11 10:04:17
【问题描述】:

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

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

【问题讨论】:

标签: php encoding iconv strlen libiconv


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2020-12-04
    • 2011-09-14
    • 2018-11-16
    相关资源
    最近更新 更多