2013-12-05 7 views
0

Сценарий: я извлекаю запись из базы данных 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, то это приветствуется.

+0

ли вы проверить, если ваш HTML загружена правильно? что-то вроде 'if ($ dom-> loadHTML ($ html) === false) die ('не загружался');' – jaudette

+0

@jaudette: yES, я проверял, как вы сказали, HTML загружается отлично без каких-либо проблем , – PHPLover

+0

Он работает здесь с вашими данными, поэтому я не могу много помочь. Вы пробовали смотреть на '$ dom-> saveHTML()' перед циклом foreach, чтобы убедиться, что у вас есть то, что вы считаете нужным? – jaudette

ответ

0

Altough вы говорите, загружается без проблем, пожалуйста, попробуйте загрузить его, как это, так как код неверен:

$dom = new DOMDocument; 
$dom->strictErrorChecking = FALSE; 
$dom->loadHTML($html); 
+1

: Я пробовал ваш ответ, но все равно он не работал. – PHPLover

Смежные вопросы