Сценарий: я извлекаю запись из базы данных MySQL. Эти данные записываются в формате HTML, поэтому я хочу удалить несколько тегов из этой записи данных HTML. Для этого я написал и одну функцию. Но я не понимаю, почему контроль не попадает внутрь foreach. Для справки я даю ниже некоторой части функции:Почему контроль не проходит внутри foreach в следующем сценарии?
function clear_question_data($html){
$dom = new DOMDocument();
$dom->loadHTML($html);
foreach($dom->getElementsByTagName('img') as $image)
{ echo "Inside Foreach"; die;
$image->removeAttribute('alt');
$image->removeAttribute('xmlns');
$image->removeAttribute('title');
}
echo "Out of Foreach"; die;
$txt=$dom->saveHTML();
$dom->loadHTML($txt);
foreach($dom->getElementsByTagName('img') as $image)
{
$srcval=$image->getAttribute('src');
$srcval = htmlspecialchars_decode($srcval);
$srcval = str_replace(' ', ' ', $srcval);
if(strpos($srcval,"%5C%22")==0)
{
$srcval = str_replace("%5C%22", "", $srcval);
$srcval = str_replace(".png%5C%22", ".png", $srcval);
}
if(strpos($srcval,"../../..")==0)
{
$srcval = str_replace("../../..", "", $srcval);
}
if(strpos($srcval,"../..")==0)
{
$srcval = str_replace("../..", "", $srcval);
}
if(strpos($srcval,"/ckeditor_3.6.1//plugins")==0)
{
$srcval = str_replace("/ckeditor_3.6.1//", EPN_SITE_URL."ckeditor_3.6.1/", $srcval);
}
$srcval = str_replace(".png/\"", ".png", $srcval);
$srcval = str_replace("�", "-", $srcval);
$image->setAttribute('src',$srcval);
}
$final_data=$dom->saveHTML();
return $final_data;
}
Данные выборки входных (т.е. $html
) выглядит следующим образом:
Glucose when hetaed with CH<sub>3</sub>OH in presence of dry HCl gas gives<img align=\"middle\" alt=\"«math xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mi»§#945;«/mi»«/math»\" class=\"Wirisformula\" src=\"/ckeditor_3.6.1//plugins/ckeditor_wiris/integration/showimage.php?formula=dedbf6a559a928eeeaee82c4b1bf40d3.png\" title=\"Double click to edit\"> and <img align=\"middle\" alt=\"«math xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mi»§#946;«/mi»«/math»\" class=\"Wirisformula\" src=\"/ckeditor_3.6.1//plugins/ckeditor_wiris/integration/showimage.php?formula=2c5cf4a4494a03be06d6c32308a225ba.png\" title=\"Double click to edit\">-methyl glycosides because it contains.<br>
Всякий раз, когда я пытаюсь отлаживать эту функцию я получая сообщение «Из-за Foreach» вместо «Inside Foreach». Я не понимаю, почему это происходит. Может ли кто-нибудь помочь мне в этом отношении, пожалуйста? Любая помощь будет высоко оценена. Если у вас есть лучший способ достичь результата, чем в foreach, то это приветствуется.
ли вы проверить, если ваш HTML загружена правильно? что-то вроде 'if ($ dom-> loadHTML ($ html) === false) die ('не загружался');' – jaudette
@jaudette: yES, я проверял, как вы сказали, HTML загружается отлично без каких-либо проблем , – PHPLover
Он работает здесь с вашими данными, поэтому я не могу много помочь. Вы пробовали смотреть на '$ dom-> saveHTML()' перед циклом foreach, чтобы убедиться, что у вас есть то, что вы считаете нужным? – jaudette