当前位置: 首页 > 面试题库 >

如何在PHP中检测格式错误的utf-8字符串?

陶英纵
2023-03-14
问题内容

iconv函数有时会给我一个错误:

Notice:
iconv() [function.iconv]:
Detected an incomplete multibyte character in input string in [...]

有没有办法在将数据放入inconv之前检测到utf-8字符串中存在非法字符?


问题答案:

首先,请注意,无法检测文本是否属于特定的不需要的编码。您只能检查字符串在给定编码中是否有效。

您可以使用从PHP 4.3.5 开始在preg_match

可用的UTF-8有效性检查。0如果给出了无效的字符串,它将返回(没有其他信息):

$isUTF8 = preg_match('//u', $string);

另一种可能是[mb_check_encoding

$validUTF8 = mb_check_encoding($string, 'UTF-8');

您可以使用的另一个功能是[mb_detect_encoding

$validUTF8 = ! (false === mb_detect_encoding($string, 'UTF-8', true));

strict参数设置为至关重要true

此外,iconv 允许您即时更改/删除无效序列。但是,如果iconv遇到这样的序列,它将生成一个通知;此行为无法更改。

echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string), PHP_EOL;
echo 'IGNORE   : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $string), PHP_EOL;

您可以使用@并检查返回字符串的长度:

strlen($string) === strlen(@iconv('UTF-8', 'UTF-8//IGNORE', $string));

iconv还要查看手册页上的示例。

您尚未共享发出通知的源代码。如果需要更具体的建议,则应添加它。



 类似资料:
  • 问题内容: 如何使用索引逐个字符地迭代UTF-8字符串? 使用方括号运算符访问UTF-8字符串时,utf编码的字符包含2个或更多元素。 例如: 但我想拥有: 有可能,但是这非常慢,即。 是否有另一种无需使用字符就可以逐字符插入字符串的方法? 问题答案: 使用preg_split。使用“ u”修饰符, 它支持UTF-8 Unicode。

  • 问题内容: 我将承担将数据库从Latin1转换为UTF-8的繁琐而棘手的任务。 在这一点上,我只想检查存储在表中的数据类型,因为这将确定我应使用哪种方法转换数据。 具体来说,我想检查Latin1列中是否有UTF-8字符,什么是最好的方法?如果只影响几行,那么我可以手动修复它。 选项1.执行MySQL转储并使用Perl搜索UTF-8字符吗? 选项2。使用MySQL CHAR_LENGTH查找具有多字

  • 问题内容: 在PHP中,我们可以用来确定字符串是否为有效的UTF-8。但这不是可移植的解决方案,因为它需要编译并启用mbstring扩展名。此外,它不会告诉我们 哪个 字符无效。 是否存在可以匹配给定字符串中无效的UTF-8字节的正则表达式(或其他100%可移植的其他方法)。这样,可以在需要时替换那些字节(保留二进制信息,例如在构建包含二进制数据的测试输出xml文件时)。因此,将字符转换为UTF-

  • 问题内容: 是否有检测字符串字符集的通用方法?我使用IPTC标签,并且没有已知的编码。我需要检测它,然后将其更改为utf-8。 有人可以帮忙吗? 问题答案: 您要使用编码检测器

  • 问题内容: 我的数据库已正确设置为UTF-8,并且正在处理包含日语字符的数据库。如果我从mysql命令行执行SELECT * …,我会正确看到日语字符。当将数据从数据库中拉出并显示在网页上时,我可以正确地看到它。 但是,在phpMyAdmin中查看表数据时,我只会看到垃圾文本。即。 ç§ã日本料ç†ãŒå¥½ããããã㥥œœ¬æ–™ç†ã… 如何获取phpMyAdmin以日语显示字

  • 问题内容: 我正在获取JSON格式和唯一可用格式的数据提要。在PHP中,我正在使用json_decode解码JSON,但此操作已中断,并且我发现JSON是在某些地方生成的,其昵称用双引号引起来。我使用以下方法验证了这一点:http : //jsonformatter.curiousconcept.com 我无法控制数据的创建,但是当这种格式出现时,我必须处理它。解析后的数据将被放入MySQL TA