如题 请问2个套在一起网上说是防止一些&copy之类的被浏览器解析,所以要用&来代替&.
但是 我经过urlencode编码之后$a已经一个&符号都没有了啊 不是很明白这2个的意思。自己写了一段代码也不知道是不是写在点子上了。。
$a="http://localhost/index.php?a=1&copy=&2";
echo $a;
echo '<br>'.urlencode($a); //http%3A%2F%2Flocalhost%2Fdz%2Findex.php%3Fa%3D1%26copy%3D%262
echo '<br>'.htmlentities(urlencode($a));//http%3A%2F%2Flocalhost%2Fdz%2Findex.php%3Fa%3D1%26copy%3D%262清明白人给小弟解释解释吧,最好举个例子看下。 手册里的例子根本没看明白。

解决方案 »

  1.   

    urlencode 
     将字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号;
     htmlentities 是将字串转化成html编码
     & 符号 由于urlencode 被转化了,这样可以解决你说的问题
      

  2.   

    楼上的兄弟没明白的我的意思 
    我是或 我urlencode已经把 & 符号给转换了
    还要一个htmlentities在外面有什么用呢?
    最好有个具体例子叫我看看这个2个函数套在一起有什么左右。
    手册里介绍的实在是不好理解
      

  3.   

    echo "<title>hello,everybody!</title>123123";   //输出为    123123
    不会把html 标签输出,即把此字串当作html 解析echo htmlentities('<title>hello,&everybody!</title>'); 
     //输出: <title>hello,&everybody!</title>
    将html实体输出,输出整个字串;  你上面的例子中没有HTML中的实体,所以输出结果相同;
      不知道这样能否明白
      

  4.   

    楼上的兄弟 这2个函数我都明白什么意思 可是还是不是很明白为什么要套在一起用 urlencode不是已经把别的符号转换了么 那样的话 < 这个符号不也变成%XX的形式了么 浏览器也能直接解析啊 为什么要用下
    htmlentities呢?麻烦在解释一下吧
      

  5.   

    htmlentities  这里可以不用的,
    你需求的URL里面已经没有html实体了,所以这里不用,
    浏览器可以自动解析,因为浏览器有解析他的方法,所以这个你不用考虑,
    一般在需要使用html实体的地方,使用htmlentities  
      

  6.   


    htmlentities 是防止别人在网址中加入有害代码。比如 < > 之类的,可以参考discuz的网址参数过滤。
    //处理REQUEST_URI
    if(!isset($_SERVER['REQUEST_URI'])) {
    $_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF'];
    if(isset($_SERVER['QUERY_STRING'])) $_SERVER['REQUEST_URI'] .= '?'.$_SERVER['QUERY_STRING'];
    }
    if($_SERVER['REQUEST_URI']) {
    $temp = urldecode($_SERVER['REQUEST_URI']);
    if(strexists($temp, '<') || strexists($temp, '"')) {
    $_GET = shtmlspecialchars($_GET);//XSS
    }
    }
      

  7.   

    htmlentities 可以按照原样输出html实体, 这样可以防止别人在网址中加入有害代码;
     例如: 一个输入框中输入:
        <script type="text/javascript">
            //有害的代码;
        </script>
        这样利用htmlentities将这段脚本原样输出,而不会执行这段脚本;