28375


私のPHPプロジェクトで以下のようなテンプレートがあります。（bodyの中身やheadの中身はわかりやすいように取り除いています。）

[code]

    <!DOCTYPE html>
    <head>
        <noscript></noscript>
    </head>
    <body>
    </body>
    </html>
    
[/code]

以上のテンプレートファイルを以下のPHPスクリプトで読み込んで表示させています。

[code]

        $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();
    
[/code]

このコードは、自分のmacのXAMMP上ではそのまま表示され、問題ありません。

しかし、サーバにこのコードを上げてブラウザで見ると、以下のように表示され、  
noscriptタグがBodyの中に入ってしまいます。

[code]

    <!DOCTYPE html>
    <html>
    <head></head>
    <body>
        <noscript></noscript>
    </body>
    </html>
    
[/code]

どなたかこの現象がなぜ起こるか分かりますでしょうか。  
開発環境は以下です。  
環境に差がありますが、noscript以外は問題なく動いているので、  
関係なさそうに思いますが。。

【環境】  
Local  
\- XAMPP on my Mac  
\- Apache/2.4.18 (Unix) PHP/5.6.20

Server  
\- Apache/2.2.15 (Unix) PHP/5.6.15


CC BY-SA 3.0
2016-08-18T06:34:34.323
28350
2016-08-19T11:29:40.573
2016-08-18T08:51:07.897
18503
18503
question
php apache dom
noscriptタグが、サーバ環境でのみ、bodyの中に入ってしまう現象


解決しました。  
原因は **libxml** でした。  
ローカルの **libxml** のバージョンが **2.8.0**  
サーバの **libxml** のバージョンが **2.7.6** でした。

そしてこの[changelog](http://xmlsoft.org/news.html)によると、  
2.8.0のバージョンにて  
`HTML parser error with <noscript> in the <head>`  
head内のnoscriptのパーサーエラーが直されたとのこと。  
なので **2.8.0にバージョンを上げる事で解決しました** 。  
まさかCのライブラリのバグだったとは、、、たどり着くのにかなり時間を要しました。。。


CC BY-SA 3.0
2016-08-19T11:29:40.573
28375
2016-08-19T11:29:40.573
18503
28350
answer