我用htmlspecialchars将网页中的字符串都转换了,但是输出的时候怎么输出呢?
$info = "<IMG src=\"http://localhost:8004/logo.jpg\">";
$info_two = htmlspecialchars($info);
echo $info_twoh后输出(在页面源代码中显示)的是&lt;IMG src=&quot;http://localhost:8004/logo.jpg&quot;&gt;,在页面上显示的是$info的内容,我想让在页面显示图片该怎么做呢?必须用正则表达式替换里面的&lt;之类的字符么?
急急急

解决方案 »

  1.   

    <?php
    $str = "Jane &amp; &#039;Tarzan&#039;";
    echo html_entity_decode($str);
    echo "<br />";
    echo html_entity_decode($str, ENT_QUOTES);
    echo "<br />";
    echo html_entity_decode($str, ENT_NOQUOTES);
    ?>
      

  2.   

    你既然要输出html还用htmlspecialchars干什么htmlspecialchars就是防止输出html显示的
      

  3.   

    啊,这么快就有答案了啊,我刚差了手册查到了htmlspecialchars_decode(),试了一下可以了,先将代码用htmlspecialchars()转换存储到数据库,然后读出来显示啊,这样不是安全么?书到用时方恨少。
      

  4.   

    防注入的是addslashes,如果已经有连接比如mysql可以用mysql_real_escape_string
    htmlspecialchars这个是防止,比如你写个留言本,有人去留言写<script src="xx"></script><iframe>,这个被显出来容易挂病毒都很容易,和数据库无关
      

  5.   

    那如果别人留了言用htmlspecialchars转换后,你怎么看呢,不是还要转换过来正常显示么?
      

  6.   

    lz可以去了解下xss攻击,就这么转回来,没什么防范效果。
      

  7.   

    那这个转换有什么作用呢?刚才又碰到一个新问题,网页源文件中的img 语句是 <IMG src=\"http://localhost:8004/logo.jpg\">,但是图片不显示,通过页面上面点击图片的属性得到的地址是http://localhost:8004/%22http://localhost:8004/logo.jpg/%22,你们有碰到过么?
      

  8.   

    别人的留言怎么不能正常显示了,有谁没事用html代码写留言的,就算设置字体字号颜色图片ubb也可以用,你要实在想开html那就自己搞个替换把不安全的html代码都转换掉
      

  9.   

    大哥别急啊,都怪我没有说清楚,我用新浪的在线编辑器最后提交的数据的时候有个htmlspecialchars转换字符串,我想不用htmlspecialchars转换直接输出,但是好像看到那里说这是安全措施,于是就想着找一个函数将转htmlspecialchars转换过的字符串转换回来,但是不知道怎么转换就来这里提问了,别人通过编辑器提交的内容我要看,那肯定的把htmlspecialchars转换过的字符串转换回来吧,要不页面上显示的都是html源文件代码,我一点一点找文字很难受的。
      

  10.   

    首先要知道这是个什么编辑器
    如果是html编辑器,一般的做法是保留大部分代码,过滤部分可能存在危险的代码,如script, iframe等等
    如果不是html编辑器,那他的本意就是不让提交html,所以也没有必要还原代码了再有就是,不知道你要干什么,这个编辑器是你写的还是别人写的或是别人写的给你用,你能不能修改源代码
      

  11.   

    可以修改源代码的,这是我在网上找的源码,是html编辑器,我想借助这个做一个留言本,还有这个输出的图片路径是<IMG src=\"http://localhost:8004/logo.jpg\">两个引号都被转义了,在iis下图片的路径会变成http://localhost:8004%20http://localhost:8004/logo.jpg这样的路径,找了一天也没有找到解决办法,刚刚想到用正则把\"替换为"但是一直失败。preg_replace("/\\\"/","\"",$gently_editor)
      

  12.   

    给你个函数参考,直接用这个函数代替htmlspecialchars,既保证安全又能用大部分html代码function editor_safe_replace($content){
    $tags = array(
    "'<iframe[^>]*?>.*?</iframe>'is",
    "'<frame[^>]*?>.*?</frame>'is",
    "'<script[^>]*?>.*?</script>'is",
    "'<head[^>]*?>.*?</head>'is",
    "'<title[^>]*?>.*?</title>'is",
    "'<meta[^>]*?>'is",
    "'<link[^>]*?>'is",
    );
    return preg_replace($tags, "", $content);
    }
      

  13.   

    楼主从<IMG src=\"http://localhost:8004/logo.jpg\">变化成这个http://localhost:8004%20http://localhost:8004/logo.jpg 这种错误 还的靠自己仔细检查代码,外人不看你的程序是找不到问题所在的。
      

  14.   

    主要替换 < 和 > , 把全部都替换掉, 就没什么标签嵌入可谈了
      

  15.   

    <IMG src=\"http://localhost:8004/logo.jpg\">变化成这个http://localhost:8004%20http://localhost:8004/logo.jpg这种情况在apache下正常,在iis不正常,代码是网上下载的新浪在线编辑器,里面大部分都是js代码,我js很菜,所以我就想在输出的时候将\"变成",但是正则匹配老是不成功
      

  16.   

    终于好了,要转义那么多次才可以preg_match_all("/\\\\\"/",<IMG src=\"http://localhost:8004/logo.jpg\">,$ee);要这样才能匹配\"!
      

  17.   

    php表达\本身需要转义,在正则里面表达\也要转义,所以在正则表达一个\需要四个\
      

  18.   

    这是因为你的PHP环境打开自动转义了,你可以再C:/WINDOWS/PHP.INI中查看
    当magic_quotes_gpc   =   on 时将自动进行转义(默认是on)   你可在程序中用get_magic_quotes_gpc()检查他的状态 
    程序为:
    if (get_magic_quotes_gpc()==1){
         $name=stripcslashes($_POST["name"]);       
    }else{
         $name=$_POST["name"];
    }
      

  19.   

    <script>alert("hahahhah");</script>
      

  20.   

    <script type="text/javascript">alert("hahahhah");</script>
      

  21.   

    靠,我这里写入的javascript代码,为什么刷新页面不执行?