Php UTF8空字符&;规范化空白字符
我正在编写一个脚本,该脚本使用数据库中的字符串构建XML提要。这些字符串是用户从Facebook Open Graph API输入的图像标题。根据facebook的说法,字符串应该都是UTF8。因此,我将标题导入数据库,并将其存储为utf8 unicode(我还尝试了utf8 bin) 但我在尝试显示输出XML提要时总是遇到相同的错误,因为其中一个标题有一个奇怪的空白字符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
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上学到了一些东西