2016-12-29 2 views
0

Я отправляю html в \ DomDocument и \ DomDocument конвертировать все специальные символы.PHP DOMDocument преобразует> в > и & &

, как я мог бы сказать \ DomDocument не преобразовать наш специальный символ между {% .....%}

{%, если & а> 10%} преобразуется в { %, если & > 10%}

ввода

<!DOCTYPE html> 
<body> 
    {% if &a > 10 %} 
     {% print &a %} 
    {% end if %} 
<img src="{%# image %}" > 
<script> 
    if a > 10 
</script> 
</body> 

выход

<!DOCTYPE html> 
<html><body> 
    {% if &amp;a &gt; 10 %} 
     {% print &amp;a %} 
    {% end if %} 
<img src="%7B%# image %%7D" > 
<script> 
    if a > 10 
</script></body></html> 

код

$dom = new \DOMDocument('1.0', 'UTF-8'); 
$content = '<!DOCTYPE html><body> 
        {% if &a > 10 %} 
         {% print &a %} 
        {% end if %} 
       <img src="{%# image %}" > 
       <script> 
        if a > 10 
       </script> 
      </body>'; 
@$dom->loadHTML($content); 
echo $dom->saveHTML(); 
+0

Вы не можете. Не преобразование символов приведет к недопустимому XML-файлу. Задача DOMDocument заключается в том, чтобы читать/создавать допустимые файлы XML. Вы не можете выбирать. – Dezza

+0

Спасибо @Dezza, я думаю, к другому решению, я хочу кодировать данные между {%%} (regex и base64), а после завершения процесса DOMDocument конвертировать его в реальный код. –

ответ

0

, прежде чем отправить HTML для DOMDocument мы должны кодировать специальные данные и после работы Dom закончилась декодированные данные.

закодировать код

<?php 
$dom = new DomDocument(); 
$content = '<!DOCTYPE html> 
<html><body> 
        {% if &a > 10 %} 
         {% print &a %} 
        {% end if %} 
       <img src="{%# image %}"><script> 
        if a > 10 
       </script></body></html>'; 

$tag_start = '(base64'; 
$tag_end = ')'; 
//MWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMW 
// encode data 
$pattern = '/({%[^}]+})/ium'; 
preg_match_all($pattern, $content, $matches); 
foreach($matches[0] as $key => $val){ 
    $base64 = $tag_start.base64_encode($val).$tag_end; 
    $content = str_replace($val, $base64, $content); 
} 

// echo $content; 

$dom->loadHTML($content); 
$domContent = $dom->saveHTML(); 

выход

<!DOCTYPE html> 
<html><body> 
       (base64eyUgaWYgJmEgPiAxMCAlfQ==) 
        (base64eyUgcHJpbnQgJmEgJX0=) 
       (base64eyUgZW5kIGlmICV9) 
      <img src="(base64eyUjIGltYWdlICV9)"><script> 
       if a > 10 
      </script></body></html> 
0

попробуйте использовать htmlspecialchars:

$dom = new DOMDocument('1.0', 'UTF-8'); 
$content = htmlspecialchars('<!DOCTYPE html><body> 
        {% if &a > 10 %} 
         {% print &a %} 
        {% end if %} 
       <img src="{%# image %}" > 
       <script> 
        if a > 10 
       </script> 
      </body>'); 
$dom->loadHTML($content); 
echo $dom->saveHTML(); 

ВЫВОД:

<!DOCTYPE html><body> {% if &a > 10 %} {% print &a %} {% end if %} <img > src="{%# image %}" > <script> if a > 10 </script> </body>

+0

спасибо Suchit, мне не нужно конвертировать ** & a ** в ** & a ** –

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