drudfe0446838 2016-12-29 08:58 采纳率: 0%
浏览 7
已采纳

too long

I send html to \DomDocument and \DomDocument convert all special characters.

how i could say to \DomDocument don't convert our special character between {% ..... %}

{% if &a > 10 %} converted to {% if &a > 10 %}

Input

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

output

<!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>

code

$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();
  • 写回答

2条回答 默认 最新

  • drccfl9407 2016-12-30 03:41
    关注

    before send HTML to DOMDocument we should encode special data and after work of Dom ended decode data.

    encode code

    <?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();
    

    output

    <!DOCTYPE html>
    <html><body>
                    (base64eyUgaWYgJmEgPiAxMCAlfQ==)
                        (base64eyUgcHJpbnQgJmEgJX0=)
                    (base64eyUgZW5kIGlmICV9)
                <img src="(base64eyUjIGltYWdlICV9)"><script>
                    if a > 10
                </script></body></html>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程