Целью этого кода является то, что HTML-атрибут «data-original-src» добавляется к тегу img в случае небезопасных URL-адресов http: //. Но этот атрибут не генерируется.
Что не так, и какую ошибку я упускаю из виду?
В любом случае str_replace () работает как шарм.
public function parse($string) {
if($this->settings['camo_enabled'] == true) {
$doc = new DOMDocument();
$doc->loadHTML($string);
$images = $doc->getElementsByTagName('img');
//$imgarray = array();
foreach ($images as $image) {
$url = $image->getAttribute('src');
if(substr($url, 0, 8) != 'https://') {
$image->setAttribute('data-original-src', $url);
$camo = $this->proxy_url($url);
$string = str_replace($image->getAttribute('src'), $camo, $string);
unset($url, $camo);
}
}
}
return $string;
}
Я думаю, что проблема возникает из-за того, что вы забыли изменить $string
переменная, которую вы передаете в вызов метода saveHTML()
прежде чем вернуть его. Передайте ваши изменения следующим образом:
public function parse($string)
{
if ($this->settings['camo_enabled'] == true)
{
$doc = new DOMDocument();
$doc->loadHTML($string);
$images = $doc->getElementsByTagName('img');
foreach ($images as $image)
{
$url = $image->getAttribute('src');
if (substr($url, 0, 8) != 'https://')
{
$image->setAttribute('data-original-src', $url);
$camo = $this->proxy_url($url);
$string = str_replace($image->getAttribute('src'), $camo, $string);
unset($url, $camo);
}
}
}
$string = $doc->saveHTML();
return $string;
// The two lines above can also be simply rewritten as:
// return $doc->saveHTML();
}
Для получения дополнительной информации обратитесь к официальная документация.
На заметку, поскольку вы вносите изменения как в $string
переменной и в разобранном HTML-файле придерживайтесь последнего, изменив эту строку:
$string = str_replace($image->getAttribute('src'), $camo, $string);
в:
$image->setAttribute('src', $camo);
Других решений пока нет …