【问题标题】:Using iconv() to check for invalid UTF-8 characters: Detected an illegal character in input string使用 iconv() 检查无效的 UTF-8 字符:检测到输入字符串中的非法字符
【发布时间】:2015-10-08 19:34:11
【问题描述】:

我正在使用 iconv() 来检查字符串是否包含无效的 UTF-8 字符。

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

但是,这仍然会引发错误:“iconv():检测到输入字符串中的非法字符”

据我所知,这不应该使用 //IGNORE 标志吗?

我在 Ubuntu 14.04.1 LTS 上使用 PHP 5.5.9-1ubuntu4.6

【问题讨论】:

标签: php utf-8 character-encoding


【解决方案1】:

Another answericonv() 抛出错误的原因提供了更好的答案:

输出的字符集(第二个参数)应该不同 来自输入字符集(第一个参数)。如果它们相同,那么 如果字符串中有非法的 UTF-8 字符,iconv 将拒绝 根据输入的字符集,它们是非法的。

Taken from a comment在PHP手册中,你可以用这个函数检测一个字符串是否用UTF-8编码:

 $valid = mb_detect_encoding($str, 'UTF-8', true); // returns boolean.

更多info on mb_detect_encoding();

【讨论】:

  • 删除了我对该问题的其他评论,因为在我实际上更改了我正在测试的字符串的编码之后,这个工作得很好。发布了一个答案,因为它比两个单独的链接更规范(并且欺骗没有技术上解决检查 UTF-8 编码字符串的问题 - 只是解释了为什么 iconv() 不起作用)
  • 完美运行!谢谢!
猜你喜欢
  • 2014-08-16
  • 2012-02-02
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 2021-05-09
相关资源
最近更新 更多