将 url 转换为双引号的单引号


Single quotes turning url into twins?

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

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

上面的代码将链接输出为:

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

谁能阐明其中的原因?

当你

使用'将整个字符串包围起来时,你不应该'-转义你的"。这本身无法创建该输出,但它可能会混淆某个地方的解析器,从而产生问题。试试这个:

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

使用 PHP 输出动态数据,而将 HTML 排除在其中。这将为您节省数小时的报价挫败感

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

输出

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

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

您正在转义双引号。使用单引号时没有必要,反之亦然。

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

上面的代码将链接输出为:

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

不,它不会产生该输出。

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

使用浏览器的"查看源代码"功能查看代码生成的 HTML。

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

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

浏览器将'"http://example.com'"解释为 href 属性的值。HTTML 属性值可以用引号 ("( 或撇号 (' ( 括起来,也可以完全不带引号,引号字符必须是等号 (=( 后的第一个非空格字符。因为它在等号后找到一个反斜杠('(,所以它得出结论,属性值没有被引号,并读取所有内容,直到第一个空格或直到标签结束(>(作为属性的值。

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


我不会在这里为您的问题提供解决方案。这个问题已经有很多答案,为您提供了避免这种情况发生的各种方法。

但是,请查看 PHP 手册中的字符串文档页面。您需要知道的所有内容都在那里解释。