UTF8 null字符&规范化空白字符

时间:2017-04-21 03:31:45

标签: php mysql encoding utf-8 character-encoding

我正在开发一个使用数据库中的字符串构建XML Feed的脚本。字符串是Facebook Open Graph API中用户输入的图像标题。根据facebook,这些字符串应该都是UTF8。所以我将标题导入数据库并将它们存储为utf8-unicode(我也试过utf8-bin)

但是在尝试显示输出XML提要时我总是遇到同样的错误,因为其中一个标题有一个奇怪的空白字符

This page contains the following errors:

error on line 63466 at column 14: Input is not proper UTF-8, indicate encoding !
Bytes: 0x0B 0x54 0x68 0x6F
Below is a rendering of the page up to the first error.

在数据库(phpmyadmin)和页面源代码(使用chrome)中,有问题的字符显示为空方形符号。
现在,如果我将有问题的字符复制并粘贴到转换器中,它会给我十六进制000B

解决这个问题的最简单方法是什么? 我还想先了解一下,为什么Facebook Graph API在不应该给我非utf8字符的时候

尝试失败:

  • utf8_encode()无效,因为其余字符串的UTF8有效。
  • 我还尝试了多种不同的方法去除所有非utf8字符,但它没有过滤掉这个特定的字符。在尝试过滤掉所有非拉丁语时也是如此。
  • htmlentities()htmlspecialchars()或同样不编码有问题的字符
  • charactericonv(mb_detect_encoding())不会将字符串检测为无效utf8
  • str_replace()或preg_replace()没有帮助,如果我尝试在Visual Studio代码中复制并粘贴该字符,则不会粘贴任何内容,甚至不会粘贴空白
  • str_replace(“\ 0”,“”,)... nope

2 个答案:

答案 0 :(得分:1)

以下列出了我们在原始海报中找到和/或处理过的内容:

我们检查了上述情况,发现最初的问题是由vertical tabulation symbols爬进文本字段引起的。删除所述符号的好方法是运行[ ],其中$str = str_replace("\x0b", "", $str);是要插入文本字段的字符串。重要的是不要将$str替换为that might not be desired

答案 1 :(得分:1)

如果0B始终位于字符串的开头,则将字符串追溯到其源,并查看它们是否为“BOM”编码。 Wikipedia on BOM

至少回过头来看数据的各个步骤,这样我们就可以帮助推断出问题的根源。

注意:虽然表情符号和中文需要,但如果这是“真正的”问题,切换到for loop $query = 'SELECT `Author`,`Name` from `table` where `Author` = $author AND `Name` = $name'; if($query != null){ insert new row } end for loop 将不会处理BOM。

(使用str_replace只是一个绑带)