是这样的表单提交比如:<pre class="brush: java;">111</pre><script>alert('hack');</script><p>new pa</p><br>php服务器端:怎样把其他的尖括号转换成html实体,除了<pre class="brush: java;">111</pre>我使用htmlspecialchars函数,但是连 <pre class="brush: java;">111</pre> 括号也转换了。

解决方案 »

  1.   

    strip_tags() 函数
    第一个参数是原文
    第二个参数是允许的标签。
    比如$html = strip_tags($html, array('<pre>'));
      

  2.   

    可能我没说明白:表单提交:<pre class="brush: java;">111</pre>
    <script>alert('hack');</script>
    <p>new pa</p>php接收处理变成:<pre class="brush: java;">111</pre>
    &lt;script&gt;alert('hack');&lt;/script&gt;
    <p>new pa</p>就是不知道如何处理。
      

  3.   


    $html=<<<HTML
    <pre class="brush: java;">111</pre><script>alert('hack');</script><p>new pa</p><br>
    HTML;
    if(preg_match_all('#</?pre[^>]*>#',$html,$matchs)){
    foreach($matchs[0] as $pre){
    $html = str_replace($pre,'{$pre'.md5($pre).'}',$html);
    }
    $html = htmlspecialchars($html);
    foreach($matchs[0] as $pre){
    $html = str_replace('{$pre'.md5($pre).'}',$pre,$html);
    }
    }else{
    $html = htmlspecialchars($html);
    }
    echo $html;
      

  4.   

    额,英语老师教的可能一开始我自己的思路都有点模糊啊不好意思啊,我现在清晰一点了,就是表单提交到php服务器的数据,除了<p>、<br />、<a> <pre>等等正常的标签 不转换他的括号。而像这样的<script>alert('aa');</script>坚决替换成 &lt;script&gt;alert('hack');&lt;/script&gt;其实说白了,就是防止黑客。4楼前辈的代码连<p>这样的都转换成&lt;p&gt;了。
      

  5.   

    那就只做script处理啊<?php$str = '<pre class="brush: java;">111</pre>
    <script>alert("hack");</script>
    <p>new pa</p>
    <br>';echo str_replace(array('<script>', '</script>'), array('&lt;script&gt;', '&lt;/script&gt;'), $str);
      

  6.   

    嗯,7楼的差不多可以了。。还有一些比如 onclick , <isindex 等等怎样过滤呢。。有没有一些常用的过滤函数或类。
      

  7.   


    $html=<<<HTML
    <pre class="brush: java;">111</pre><script>alert('hack');</script><br />
    <script language="javascript">alert('hack');</script>
    <a href="aaa.php" onclick="alert('aaa');">aaa</a>
    <a href="bbb.php" onmouseover="alert('bbb');">bbb</a>
    <p>new pa</p><br>
    HTML;
    $html = preg_replace(array('#<(/?script[^>]*)>#','#on\w+="[^"]+"#'),array("&lt;\\1&gt;",''),$html);
    echo $html;
    exit;
      

  8.   

    额,百度又来到自己的帖子了,麻烦大家这么久了,非常感谢第一次玩php,很多东西不熟悉。顺便留个外链
    http://www.android-study.com/