回音链接,获取斜线?

时间:2020-03-06 14:58:48  来源:igfitidea点击:

我发现我随时都可以执行以下操作:

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>

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

更新:
我粘贴了以上回复,但并未真正查看它。因此,在查看源代码时HTML是正确的,但实际页面会在其后加上另一个斜杠来解释它。

解决方案:
这都是rawlurlencode()的结果。如果我一起解码或者完全跳过编码,那么一切都将完美运行。关于rawurlencode()的某些内容使浏览器希望在其中添加斜杠。

解决方案

香港专业教育学院从未有过,我们是如何精确地回应链接?以下所有内容均应起作用。

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:///

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

如果我们使用双引号并转义内部双引号,是否会得到相同的结果?

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

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

我的猜测是,这就是浏览器的行为,因为没有主机名或者IP地址就无法建立http://链接(我们不能仅访问协议)。

尤其是Firefox,它以可见的方式向我们显示html源,而这很少是我们发送它的方式。显然,有关链接或者其上下文的某些内容使浏览器解释了斜杠。

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

正如一些人指出的那样," http://"不是有效的链接,因此浏览器在末尾添加了额外的斜杠。要查看它,请尝试从机器中将lynx -dump http://yourdomain/yourfile.php(如果我们很幸运,有了一个Linux)或者telnet到端口80的服务器,并输入以下命令:

GET /path/file.php HTTP/1.0

并查看结果。

我们是否研究过PHP配置设置?可能是magic_quotes_gpc决定为我们转义(我被该设置咬了好几次,尤其是在处理AJAX / JSON流量时)。尝试确保它已关闭并再次回显(我们可能需要编辑php.ini文件,或者将php_flag magic_quotes_gpc off添加到工作目录中的.htaccess文件中,具体取决于环境)。