Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php UTF8空字符&;规范化空白字符_Php_Mysql_Encoding_Utf 8_Character Encoding - Fatal编程技术网

Php UTF8空字符&;规范化空白字符

Php UTF8空字符&;规范化空白字符,php,mysql,encoding,utf-8,character-encoding,Php,Mysql,Encoding,Utf 8,Character Encoding,我正在编写一个脚本,该脚本使用数据库中的字符串构建XML提要。这些字符串是用户从Facebook Open Graph API输入的图像标题。根据facebook的说法,字符串应该都是UTF8。因此,我将标题导入数据库,并将其存储为utf8 unicode(我还尝试了utf8 bin) 但我在尝试显示输出XML提要时总是遇到相同的错误,因为其中一个标题有一个奇怪的空白字符 This page contains the following errors: error on line 63466

我正在编写一个脚本,该脚本使用数据库中的字符串构建XML提要。这些字符串是用户从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字符

失败的尝试:

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

以下是我们发现和/或处理原始海报的内容列表:

  • )
  • )

我们检查了上面的内容,发现最初的问题是由于潜入文本字段引起的。删除上述符号的一个好方法是运行
$str=str\u replace(“\x0b”,”,$str)
,其中
$str
是要插入文本字段的字符串。重要的是不要替换
\v
,因为。

如果0B总是在字符串的开头,那么请将字符串追溯到其源,并查看它们是否为“BOM”编码

至少我们可以带回来数据所采取的各种步骤,这样我们就可以帮助推断问题的根源

注意:尽管表情符号和中文需要,但如果BOM是“真实”问题,切换到
utf8mb4
将不会处理BOM


(使用str_replace只是一张绷带)

你试过了吗?我提到的主题中的注释解释了为什么一些utf-8排序机制不能产生utf-8结果。目前正在测试,到目前为止没有任何更改。很遗憾,我应该在数据库中重新导入字符串,还是在从utf8 unicode切换到general_ci时,它会自动将它们转换为新的编码?对此我深表歉意。我个人会选择unicode_ci。呜呜呜,这个密码修好了!非常感谢你!!!在来到这里之前,我花了很多时间试图解决这个问题,所以我真的不介意是否需要做不必要的更改。。。至少我在utf8_mb4:D上学到了一些东西