回音链接,获取斜线?
我发现我随时都可以执行以下操作:
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文件中,具体取决于环境)。