在我的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,解决了这个问题!