php文件:
<script>if(top==self) url="http://www.baidu.com/"; else url="<?php echo $SongUrl ?>";</script>
<?php $url="<script>document.write(url)</script>";echo $url;?>
<!--
<?php header("Location:".$url."")?>
-->想要实现的功能:
在地址栏直接输入url,跳转到www.baidu.com,否则header location到指定的音频地址($SongUrl)
遇到的问题:
用echo输出,显示的url正常,(地址栏直接输入该php地址,echo输出显示:www.baidu.com)
但使用header location后,跳转到的url是encode了的“<script>document.write(url)</script>”(http://域名/%3Cscript%3Edocument.write(tzurl)%3C/script%3E)。而并非跳转到www.baidu.com。求解答

解决方案 »

  1.   

    URL被编码了,代码改为:<script>if(top==self) url="http://www.baidu.com/"; else url="<?php echo $SongUrl ?>";</script>
    <?php $url="<script>document.write(url)</script>";echo $url;?>
    <!--
    <?php header("Location:".urldecode($url)."")?>
    -->
      

  2.   

    urldecode
    (PHP 4, PHP 5)urldecode — 解码已编码的 URL 字符串说明
    string urldecode ( string $str )
    解码给出的已编码字符串中的任何 %##。返回解码后的字符串。 Example #1 urldecode() 例子<?php
    $a = explode('&', $QUERY_STRING);
    $i = 0;
    while ($i < count($a)) {
        $b = split('=', $a[$i]);
        echo 'Value for parameter ', htmlspecialchars(urldecode($b[0])),
             ' is ', htmlspecialchars(urldecode($b[1])), "<br />\n";
        $i++;
    }
    ?> 
      

  3.   

    后台数据要交给前台, 可以在页面发送的时候, 就像你这种写法.
    <script>if(top==self) url="http://www.baidu.com/"; else url="<?php echo $SongUrl ?>";</script>
    因为你的php首先处理这些脚本, 将其处理成为文本, <script>if(top==self) url="http://www.baidu.com/"; else url="那个变量的值";</script>, 然后发送回客户端(这里是经过网络传输了, 也就是说你的后台处理这里已经断了), 客户端通过你的http头的媒体类型(例如:Content-Type: text/html就指明了这是html文本)判断需要用什么方式解析, 这里的客户端通常就是浏览器...<script>document.write(url)</script>
    这个代码已经属于前台代码了...对于服务端来说, javascript就是文本, 没有任何特殊含义...你可以去通过浏览器的查看源代码看你的程序处理结果..分清楚前台和后台, 记住:
    1. 后台程序在后台处理过程可以给前台程序提供一些数据.
    2. 在完成网络交互后, 后台程序和前台程序是互不干扰的, 可以认为完全没有关系了
    3. 在交互完成后, 如果想要后台改变前台内容, 或前台对后台产生影响, 都需要通过网络传输.前台: html, css, javascript等浏览器或其他客户端的处理脚本.
    后台: php, jsp, asp等服务器程序通过对用户请求(URL及表单数据)进行分析, 选择合适的程序(比如登录)进行处理, 返回处理结果.