为什么<noscript>标签内的HTML标签显示为文本?

9

我有一个noscript部分:

<noscript>
  <h1><?php echo $php_title; ?></h1>
  <div><?php echo $php_abstract; ?></div>
</noscript>

当我在一个 .html 文件中尝试这样做(当然要移除 php 标签),它按预期工作,但是在 .php 文件中,我会在浏览器中看到这样的输出(即不会将 <p> 视为 html 标签):

<h1>Stephen Porges "The Polyvagal Theory"</h1>

我没有使用PHP设置任何特殊的标头:

<?php
ini_set('display_errors', 1); 
error_reporting(E_ALL);

require_once 'HTTP/Request2.php';

$url = "https://api.zotero.org/groups/56508/items/3B6TR25A?format=atom&content=json";
$r = new HTTP_Request2($url, HTTP_Request2::METHOD_GET);

$r->setConfig(array(
    'ssl_verify_peer'   => FALSE,
    'ssl_verify_host'   => FALSE
));
try {
    $response = $r->send();
    if ($response->getStatus() == 200) {
            $body = $response->getBody();
            $xml = new SimpleXMLElement($body);
            $php_content = $xml->content;
            $php_json = json_decode($php_content);
            $php_title = $php_json->title;
            $php_abstract = $php_json->abstractNote;
    }
} catch (HttpException $ex) {
    echo $ex;
    exit;
}

?>
<!DOCTYPE html>
<html lang="en">

文档将根据浏览器返回为"text/html"。我使用Chrome浏览器,可能存在一个bug,但如果这是原因,那么在.html文件中可以正常工作,但在.php文件中就不行了,你有什么想法吗?

你确定PHP正在运行,或者你的代码与我上面发布的代码相似吗?这有点愚蠢的问题,但我必须问一下。 - Funk Forty Niner
请确保使用htmlentities,如下所示:htmlentities($php_title); - EasyBB
@Fred-ii- 谢谢,是的,我确定 PHP 正常运行。一切都正常工作,直到我在浏览器中关闭 JavaScript。 - Leo
@EasyBB 这里没有涉及到特殊字符。或者...测试一下。 - 不,那不是问题的所在。 :-( - Leo
1
不用谢。我上面的评论是在关闭JS的情况下完成的。 - Funk Forty Niner
显示剩余6条评论
1个回答

6
这是一个Chrome的问题,在未启用JavaScript时,首次加载页面时无法呈现。如果页面显示为纯文本,请刷新页面,即可正常呈现。
此问题已被报告:

https://code.google.com/p/chromium/issues/detail?id=235158

那个网站上的一位用户建议使用类似以下内容的解决方法:

<div id="noscript">What was in the noscript-tag ..... </div>
<script type="text/javascript">
     document.getElementById('noscript').style.display="none";
     // rest of script
</script>

因此,仅当JavaScript启用时,它才会隐藏元素。
我不认为这是一个大问题。例如,Stack Overflow无论如何都使用

2
有趣的信息,谢谢。但我宁愿远离所提出的解决方法,因为如果将noscript替换为一个没有相同特殊含义的通用div,其他客户端(例如搜索引擎)对内容的理解也可能会发生变化。尤其考虑到此错误发生的情况,我认为这并不是很重要——我认为用户在已经访问网站时很少禁用JS,大多数情况下JS要么开启要么关闭。而使用不同习惯的Chrome用户应该已经习惯了奇怪的效果... - CBroe
@CBroe 我完全同意。我只是展示它作为一个可能的替代方案,以防他们发现这是一个非常重要的问题。 - Anonymous
谢谢匿名者,是一个缓存bug,但重新加载页面也没有帮助(使用C-F5也不行)。我注意到即使禁用了JavaScript,它仍在运行一些脚本。不确定Chrome在那里做什么,但网络面板中的Initiator列的第一行说了一些关于JavaScript的东西。非常奇怪(错误通常很奇怪;-)) - Leo
1
如果它实际运行了一些 JavaScript,那确实很奇怪。除非存在某个巨大的错误,否则这并没有太多意义。 - Anonymous
1
当我关闭JavaScript并使用C-F5重新加载时,显示不正确。第二个C-F5修复了它。(所以这似乎符合你所说的。也许缓存没有涉及?这是Chrome开发人员要检查的。;-)) - Leo
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接