Вот строка 10:
$doc->loadHTML('<?xml encoding="utf-8" ?>'.$request->getData());
А вот и весь фрагмент кода из моего бэкэнда:
class ParseImageLinks{
public function __construct(){
}
public function Run(\DataLayer\Gallery\Requests\ParseImageLinks $request){
$doc = new \DOMDocument('1.0');
$doc->loadHTML('<?xml encoding="utf-8" ?>'.$request->getData());
$images = $doc->getElementsByTagName ( "img");
foreach ($images as $key => $value){
$src = $value->getAttribute("src");
$local = false;
if ($src[0] == 'h') {
$src = explode("http://", $src)[1];
}else{
if ($src[0] == '/') {
$src = substr($src,1);
$local = true;
}
}
$parse = explode('/', $src);
if (count($parse) > 2 && ($local || $parse[0] == $_SERVER['SERVER_NAME'] || $parse[0] == 'localhost:8080')) {
$image = $parse[count($parse)-1];
$size = $parse[count($parse)-2];
$value->setAttribute("src", '/?image='.$image."&size=".$size);
}
}
return $doc->saveHTML();
}
}
Я провел несколько часов в Интернете. Вот что я пробовал до сих пор:
@$doc->loadHTML('<?xml encoding="utf-8" ?>'.$request->getData());
libxml_use_internal_errors(true);
$doc->loadHTML('<?xml encoding="utf-8" ?>'.$request->getData());
Я создал файл test.php с этим
<?php
$doc = new \DOMDocument('1.0');
$doc->loadHTML('<ul><li>text</li>'.
'<li>½ of this is <strong>strong</strong</li></ul>');
foreach ($doc->getElementsByTagName('li') as $node)
{
echo htmlentities(iconv('UTF-8', 'ISO-8859-1', $node->nodeValue)), "\n";
}
?>
, который следующей командой php -f test.php > res.html
произошел в файле res.html с text
внутри него.
Я также проверил, загружен ли модуль xml
, и он есть.
Итак, если я правильно понимаю, DOMDocument () работает вообще, но не в рассматриваемом файле. Почему?
UPD . Я не уверен, но это похоже на причину неправильной загрузки изображений.