2016-12-29 108 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,我想另一种解决方案是,我想要在{%%}(正则表达式和base64)之间编码数据,并且在完成流程DOMDocument过程之后将其转换为实际代码。 –

回答

0

之前发送HTML DOM文档,我们应该编码特殊数据和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(); 

OUTPUT:

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

+0

谢谢Suchit,我不需要转换**&a **到** & a ** –

相关问题