回应一个链接,得到一个尾随的斜线?

时间:2008-10-01 15:07:05

标签: php jfilechooser

我发现任何时候我都会这样做:

echo '<a href="http://" title="bla">huzzah</a>';

我最终将以下内容呈现给浏览器:

<a href="http:///" title="bla">huzzah</a>

当我链接到带有扩展名的文件时,这会特别烦人,因为它会破坏链接。

为什么会发生这种情况以及如何解决这个问题?

更新 对于那些询问我的确切实现的人来说,就是这样。在我的故障排除中,我尽可能地减少了它,所以请不要介意我将纯文本连接到明文...

function print_it($item) {
    echo '<div class="listItem clearfix">';
    echo '<div class="info">';
    echo '<span class="title">';
    if(isset($item[6])) {
        echo '<a href="http://" title="">' . 'me' . '</a>';
    }
    echo '</span>';
echo '</div></div>';
}

更新 为了回应Matt Long,我粘贴在你的线上,它也是如此。

更新 为了回应Fire Lancer,我已经恢复了原来的尝试,并将在下面向您展示。

echo substr($item[6],13) . '<br>';
echo '<a href="http://' . substr($item[6],13) . '" title="' . $item[0] . '">' . $item[0] . '</a>';

<span class="title">www.edu.gov.on.ca%2Feng%2Ftcu%2Fetlanding.html<br>
<a href="http://www.edu.gov.on.ca%2Feng%2Ftcu%2Fetlanding.html" title="Employment Ontario">Employment Ontario</a></span>

subtr'ing的原因是由于URL在其他地方通过rawurlencode()运行,并且链接到http%3A%2F%2F会使页面认为它是本地/相对链接。

更新 我没有真正看到它就粘贴了上面的回复。因此,在查看源代码时,HTML是正确的,但实际页面会在其后用另一个尾部斜杠解释它。

解决方案: 这完全是rawlurlencode()的结果。如果我解码,或者一起跳过编码,一切都很完美。关于rawurlencode()的一些东西使浏览器想在那里粘贴一个尾部斜杠。

7 个答案:

答案 0 :(得分:3)

我从来没有那样,你是如何真实地回应这个链接?以下所有内容都应该有效。

echo '<a href="http://someothersite.com">Link</a>';
echo '<a href="anotherpage.php">Some page</a>';
echo '<a href="../pageinparentdir.php">Another page</a>';
etc

编辑,因为您添加了信息。

你不能只将http://作为href,即使直接将该链接输入到html页面也会产生这种效果。 例如:
html:

 <a href="http://" title="bla">huzzah</a>

链接(在FF3中):

http:///

答案 1 :(得分:2)

特别是Firefox,它以与你发送它的方式很少的方式向你显示html源代码。显然,关于你的链接或它的上下文的一些事情是让浏览器解释一个尾随斜杠。

我想知道它是否是url编码的副作用。如果你rawurldecode它将有所帮助。如果网址的某些部分需要保留编码,您可以搜索斜线并将其放回去。

答案 2 :(得分:1)

错误必须在其他地方。 echo逐字写入字符串。没有对任何部分进行后处理。因此,额外的斜杠会添加到代码的其他位置(在将字符串传递给echo之前)。

答案 3 :(得分:0)

如果你使用双引号并且像这样转义内部双引号,你会得到相同的结果吗?

echo "<a href=\"http://\" title=\"bla\">huzzah</a>";

答案 4 :(得分:0)

如果我将这个echo命令放在我的PHP代码中,它会按预期输出“http://”(你可以在生成的输出的源代码中看到),但是当我将鼠标悬停在结果页面中的链接上时(使用IE7),它显示http:///

我的猜测是,这是浏览器的行为,因为没有主机名或IP地址的http://链接(你不能只访问协议)。

答案 5 :(得分:0)

正如一些人指出的那样,“http://”不是一个有效的链接,所以你的浏览器会在最后添加额外的斜杠。要查看它,请尝试lynx -dump http://yourdomain/yourfile.php(如果你有幸拥有一个Linux)或从你的盒子telnet到你的服务器端口80,并输入:

GET /path/file.php HTTP/1.0

并查看结果。

答案 6 :(得分:-1)

您是否查看了PHP配置设置?可能是magic_quotes_gpc决定为你逃避一些事情(我已被该设置多次咬过,特别是在使用AJAX / JSON流量时)。尝试确保它已关闭并再次回显(您可能需要编辑php.ini文件,或将php_flag magic_quotes_gpc off添加到您正在使用的目录中的.htaccess文件中,具体取决于您的环境。)