单引号将网址变成双胞胎?

时间:2011-10-25 02:25:21

标签: php html escaping

注意到当使用单引号回显php中的基本链接时,url会自行重复。

<?php
echo '<a href=\"http://example.com\">Link URL - Single Quotes</a><br />';
?>

以上代码将链接输出为:

http://example.com/"http://example.com/"

有人能说清楚原因吗?

5 个答案:

答案 0 :(得分:4)

当您使用\将字符串作为一个整体包围时,您不应该" - 逃避'。这不能自己创建输出,但它可能会将解析器混淆在某个地方,从而产生问题。试试这个:

echo '<a href="http://example.com">Example.com</a><br />';

答案 1 :(得分:4)

使用PHP输出动态数据并将HTML保留在其中。这将为您节省数小时的报价挫折

?>
<a href="http://example.com">Example.com</a><br />
<?php
// carry on with the PHP

答案 2 :(得分:3)

echo '<a href=\"http://example.com\">Example.com</a><br />';

输出

<a href=\"http://example.com\">Example.com</a><br />

反斜杠包含在最终输出中,很可能会使HTML解析器绊倒。

答案 3 :(得分:1)

你正在逃避双引号。使用单引号时没有必要,反之亦然。

<?php
echo '<a href="http://example.com">Example.com</a><br />';
?>

答案 4 :(得分:0)

  

以上代码将链接输出为:

     

http://example.com/&#34; http://example.com/&#34;

,它不会产生该输出。

当您将光标放在链接上并单击链接时,这是您在浏览器中看到的内容。它是解决相关和不完整链接的浏览器工作的一部分,但它向用户显示的内容大多数情况下不是HTML代码中的内容。

使用浏览器&#34;查看来源&#34;查看代码生成的HTML的功能。

您的代码生成的(无效)HTML是:

<a href=\"http://example.com\">Link URL - Single Quotes</a><br />

浏览器将\"http://example.com\"解释为href属性的值。 HTTML属性值可以用引号(")或撇号(')括起来,也可以不加引号,引号字符必须是等号后面的第一个非空格字符({{1 }})。因为它在等号后面找到反斜杠(=),所以它得出的结论是,引用属性值并读取所有内容,直到第一个空格或标记结束(\)作为属性&#39;的价值。

>不是有效的URL,浏览器会将其作为不完整的URL处理。需要将不完整的URL解析为完整的URL才能使用。它看起来不像一个相对的URL(不是以\"http://example.com\"开头),它看起来不像没有主机名的绝对路径(不开始于..)。解决它的唯一方法是将其视为与当前加载的页面位于同一目录中的文件名。您的违规代码可能会在您网站根目录中的页面中运行(例如/)。

我在这里没有为您的问题提供解决方案。问题已经有很多答案可以为您提供各种方法来避免这种情况发生。

但是,请查看PHP手册中的strings documentation页面。所有你需要知道的都在那里解释。

相关问题