domdocument和utf8mysql说:字符串值不正确

qncylg1j  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(427)

我正试图通过以下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说,它在尝试将其写入数据库时遇到了问题:不正确的字符串值“\xc3”(这是德语字符)
当我简单地执行以下操作时,向db写入数据是可行的。但字符显示不正确(ã¼ 而不是ü)

$dom_obj->loadHTML($page_content)

这个问题只发生在这个网站到目前为止,其他我尝试用相同的字符做工作。你能想出一个可能的原因和解决办法吗?谢谢您!
编辑:
当我使用phps“utf8\u decode”对通过$dom\u obj获得的元描述进行解码而不使用mb\u convert\u编码时,它工作得很好。当我这样做时,以前工作过的所有其他站点都会导致错误(例如:不正确的字符串值:'\xe4t')

zzwlnbp8

zzwlnbp81#

我发现了错误。我用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");

相关问题