2016-12-29 112 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 ** –

相關問題