Получение пустой строки в следующей программе DOMDocument

У меня есть следующая программа, которая заменяет <img> теги, присутствующие в строках HTML в некотором коде. Но я не понимаю, почему я получаю пустую строку после завершения обработки строки. Я не могу указать на ошибку даже после глубокой отладки, поэтому прошу чью-то помощь.

Если вы посмотрите на мою программу, я добавлю комментарии к выводам о важных шагах, чтобы вы быстро поняли и сэкономили свое драгоценное время.

<?php
function string_sanitizer($feed_status) {
/*echo $feed_status.PHP_EOL;
<img src="http://54.174.50.242/file/pic/emoticon/default/smile.png" alt="Smile" title="Smile" title="v_middle" /><img src="http://54.174.50.242/file/pic/emoticon/default/smile.png" alt="Smile" title="Smile" title="v_middle" /><img src="http://54.174.50.242/file/pic/emoticon/default/smile.png" alt="Smile" title="Smile" title="v_middle" />*/

$temp = $feed_status;
$doc = new DOMDocument();
@$doc->loadHTML($feed_status, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$imageTags = $doc->getElementsByTagName('img');
/*print_r($imageTags);
echo PHP_EOL;
DOMNodeList Object
(
[length] => 3
)*/
$replacements = array(
'evilgrin.png' => '\ue404',
'grin.png' => '\ue415',
'happy.png' => '\ue057',
'smile.png' => '\ue056',
'surprised.png' => '\ue107',
'tongue.png' => '\ue105',
'unhappy.png' => '\ue403',
'waii.png' => '\ue407',
'wink.png' => '\ue405',
);

// regression
$i = $imageTags->length - 1;
/*echo "Value of i:".$i.PHP_EOL;
Value of i:2*/
while($i > -1) {
//echo "Loop Counter :".$i.PHP_EOL;

$tag = $imageTags->item($i);
/*print_r($tag);
echo PHP_EOL;*/
$basename = basename($tag->getAttribute('src'));
//echo $basename.PHP_EOL;
if(isset($replacements[$basename])) { //echo "In a loop :".$i.PHP_EOL;
//if the file name matches make replacements
$r = $replacements[$basename];
//echo "Value of r : ".$r.PHP_EOL;
$text = $doc->createTextNode($r);
/*print_r($text);
echo PHP_EOL;*/
$tag->parentNode->replaceChild($text, $tag);
/*print_r($tag);
echo PHP_EOL;*/
}
$i--;
}
//I think till here everything works fine but issue is in saving this HTML

// append to string container again
$feed_status = '';
foreach($doc->childNodes->item(0)->childNodes as $e) {
$feed_status .= addslashes($doc->saveHTML($e));
}

echo "Final feed status :".$feed_status; die;


if($feed_status == '') {
$feed_status = strip_tags($temp);
}
return $feed_status;
}

$str_sample = '<img src="http://54.174.50.242/file/pic/emoticon/default/smile.png" alt="Smile" title="Smile" title="v_middle" /><img src="http://54.174.50.242/file/pic/emoticon/default/smile.png" alt="Smile" title="Smile" title="v_middle" /><img src="http://54.174.50.242/file/pic/emoticon/default/smile.png" alt="Smile" title="Smile" title="v_middle" />';
$jumbo = string_sanitizer($str_sample);
echo $jumbo;
?>

Я не понимаю, почему я получаю пустую строку после в конце обработки вместо строки «\ Ue056 \ ue056 \ ue056»

Пожалуйста, помогите мне в этом вопросе. Я думаю, что код работает нормально, но проблема заключается в сохранении этого измененного HTML. Пожалуйста, помогите мне.

1

Решение

Положить ваши $feed_status HTML-фрагмент внутри некоторой пары тегов-оберток при создании объекта DOMDocument:

@$doc->loadHTML('<div>' . $feed_status . '</div>', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

Выход с примененной выше корректировкой:

Final feed status :\\ue056\\ue056\\ue056
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector