DOMDocument和UTF8。MySQL说:字符串值不正确

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (145)

我试图通过PHP中的以下脚本加载此网站的元描述(具有德语字符):

$page_content = file_get_contents($uri);
$dom_obj = new \DOMDocument();
$dom_obj->loadHTML(mb_convert_encoding($page_content, 'HTML-ENTITIES', 'UTF-8'));

但是,在尝试将其写入MySQL数据库时,Laravel表示在尝试将其写入db时遇到了麻烦:不正确的字符串值“\ xC3”(这是德语字符)

当我只是执行以下操作时,写入数据库工作。但是角色没有正确显示(Ã而不是ü)

$dom_obj->loadHTML($page_content)

这个问题只发生在这个网站到目前为止,其他我尝试使用相同的角色确实有效。你能想出可能的原因并解决吗?谢谢!

编辑:

它工作正常,当我使用PHP“utf8_decode”来解码我通过$ dom_obj而没有mb_convert_encoding获得的元描述。当我这样做时,之前工作的所有其他网站都会导致错误(如下所示:字符串值不正确:'\ xE4t')

提问于
用户回答回答于

我发现了错误。我使用substr来缩短描述。显然,substr切断了其中一个特殊字符,这就是为什么它不起作用。

foreach($dom_obj->getElementsByTagName('meta') as $meta) {
  if($meta->getAttribute('name')=='description'){
    substr($meta->getAttribute('content'), 0, 156);

这是一种解决方法:

mb_substr($foo,0,156,"UTF-8");

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励