引号神奇地改变了PHP中的文件路径


Quotation marks magically alter file path in PHP

在"循环"内部echo get_permalink()the_permalink()工作良好,并产生类似http://www.example.com/path-to-post的东西,直到我像这样将这些调用放在HTML中的引号中。

<p>
  This is normal HTML!
  "<?php the_permalink()?>"
</p>

在这一点上,它神奇地变成了一个与网站相关的url,就像"/path to post"一样。

我刚刚发现,我可以通过在引号和php之间留出一个空格来避免这个问题,这对链接和其他东西很有效,但这里发生了什么?PHP从什么时候开始能够读取PHP块之外的内容并对其做出反应?为什么会发生这种事?

Q:PHP从什么时候开始能够读取PHP块之外的内容并对其做出反应?

A: 很长一段时间以来(想想PHP 4),它能够将输出的文本捕获到缓冲区中,然后像字符串一样读取该缓冲区。请参见ob_start()。从技术上讲,函数可以只检查缓冲区上的最后一个字符是否是",并在这种情况下表现不同。

Q: 为什么会发生这种情况?

A: 你确定the_permalink()函数会发生这种情况吗?可能有一个插件试图确保绝对URL不会在<a href="<?php the_permalink() ?>">上下文中使用。你安装了哪些插件?也许这甚至是默认行为,我只是在wp-includs/link-template.php中快速扫描the_permalink()时没有看到它。

你可以尝试其他几种方法来绕过它。我会尝试的第一件事是使用&quot;而不是字面上的"

好吧,我是个傻瓜。有一个插件,叫做"绝对相对链接",它正在重新格式化页面。尽管如此,它的运作方式还是很奇怪。它似乎在寻找一个引号,然后紧接着任何类似URL的东西,并重新格式化它。但即使是一个空格也足以阻止它。我没有意识到PHP可以阅读页面上的内容。经验教训。