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

时间:2016-08-18 08:16:25

标签: php apache xampp

在我的 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>

你猜它为什么会导致什么?
我们的服务器环境的详细信息如下。 虽然我不认为它会导致问题,但存在一些差异......

【环境】
当地
- 我的Mac上的XAMPP - 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)

1 个答案:

答案 0 :(得分:2)

我自己找到了答案。 在我的服务器中, libxml 版本 2.7.6 在我的localhost中,libxml版本是 2.8.0 根据{{​​3}},
直到2.8.0,有HTML parser error with <noscript> in the <head>的错误 并且在版本2.8.0中修复了此错误 所以我将服务器上的libxml升级到2.8.0,这解决了问题!