为什么noscript移动到body标签而不是head标签?


why does noscript move into body tag instead of head tag

在我的PHP项目中我把noscript标签放在head标签中,如下所示..

<!DOCTYPE html>
<head>
    <noscript></noscript>
</head>
<body>
</body>
</html>

这是一个php脚本获取和呈现的模板文件。

PHP脚本如下:
$file = file_get_contents( $templatePath ); 
$dom = new 'DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true; // not working
$dom->encoding = 'UTF-8'; 
libxml_use_internal_errors( true );
$dom->loadHTML( mb_convert_encoding($file, 'HTML-ENTITIES', 'UTF-8') , LIBXML_NOERROR | LIBXML_NOWARNING );
libxml_clear_errors();
echo $dom->saveHtml();
在localhost中

,它就按原样显示。

但是当我把这个代码推送到我的服务器时,我在浏览器上看到这个页面,noscript标签移动到body标签中,如下图..

<html>
<head></head>
<body>
    <noscript></noscript>
</body>
</html>

你猜它为什么会导致??
下面是关于服务器环境的详细信息。尽管我不认为这是导致问题的原因,但还是有一些不同之处。

【环境】
当地
- XAMPP在我的Mac上
- Apache/2.4.18 (Unix) PHP/5.6.20


服务器- Apache/2.2.15 (Unix) PHP/5.6.15

========================================
我还测试了如下代码:

echo <<< EOM
<!DOCTYPE html>
<head>
    <noscript></noscript>
</head>
<body>
</body>
</html>
EOM;

在两种环境下都有效。所以DOMDocument可能是罪魁祸首…? 我不知道……但是我不能使用这个代码…因为我们的框架。所以我仍然需要搜索这个问题。

==============================================
这些是我们服务器上的apache模块。

Loaded Modules:
 core_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 auth_basic_module (shared)
 auth_digest_module (shared)
 authn_file_module (shared)
 authn_alias_module (shared)
 authn_anon_module (shared)
 authn_dbm_module (shared)
 authn_default_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 authz_owner_module (shared)
 authz_groupfile_module (shared)
 authz_dbm_module (shared)
 authz_default_module (shared)
 ldap_module (shared)
 authnz_ldap_module (shared)
 include_module (shared)
 log_config_module (shared)
 logio_module (shared)
 env_module (shared)
 ext_filter_module (shared)
 mime_magic_module (shared)
 expires_module (shared)
 deflate_module (shared)
 headers_module (shared)
 usertrack_module (shared)
 setenvif_module (shared)
 mime_module (shared)
 dav_module (shared)
 status_module (shared)
 autoindex_module (shared)
 info_module (shared)
 dav_fs_module (shared)
 vhost_alias_module (shared)
 negotiation_module (shared)
 dir_module (shared)
 actions_module (shared)
 speling_module (shared)
 userdir_module (shared)
 alias_module (shared)
 substitute_module (shared)
 rewrite_module (shared)
 proxy_module (shared)
 proxy_balancer_module (shared)
 proxy_ftp_module (shared)
 proxy_http_module (shared)
 proxy_ajp_module (shared)
 proxy_connect_module (shared)
 cache_module (shared)
 suexec_module (shared)
 disk_cache_module (shared)
 cgi_module (shared)
 version_module (shared)
 php5_module (shared)
 ssl_module (shared)

我自己找到了答案。libxml版本是2.7.6
在我的本机,libxml版本是2.8.0
根据这个更新日志,
在2.8.0之前,存在HTML parser error with <noscript> in the <head>
的bug这个bug已经在2.8.0版本中修复了。因此,我将服务器上的libxml升级到2.8.0,解决了这个问题!