DOMDocument и UTF8. MySQL говорит: неверное строковое значение - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь загрузить мета-описание этого веб-сайта (с немецким символом) через следующий скрипт на PHP:

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

Однако, пытаясь записать его в базу данных MySQL, Ларавел говорит, что столкнулся с проблемами, пытаясь записать это в строковое значение db: неправильное "\ xC3" (которое является немецким символом)

Когда я просто делаю следующее, запись в БД работает. Но символ отображается неправильно (ü вместо ü)

$dom_obj->loadHTML($page_content)

Эта проблема возникает только с этим сайтом, другие, которые я пробовал с тем же персонажем, работают Можете ли вы придумать возможную причину и исправить? Спасибо!

Edit:

Это прекрасно работает, когда я использую PHP "utf8_decode" для декодирования мета-описания, которое я получаю через $ dom_obj без mb_convert_encoding. Когда я делаю это, все другие сайты, которые работали раньше, приводят к ошибкам (например, это: Неверное строковое значение: '\ xE4t')

1 Ответ

0 голосов
/ 02 июля 2018

Я нашел ошибку. Я использовал 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");
...