SymfonyのFillIn機能で日本語が実体参照になってしまう問題の続き

2007年9月13日追記

本エントリ中の「実体参照」の部分は正しくは文字参照とすべきでした。


以前書いたSymfonyのFillIn機能で日本語が実体参照になってしまうという問題にいくつかコメントを頂いていましたので、遅くなりましたが反応致します。

まずは、AngelicWing Diaryにて月宮さんから

結論としては、自分が動かしているPHP5.1.6 + symfony 0.7.1914という環境では発生しません。

とのこと。問題が起こっている環境およびバージョンを記載していなかったのは私のミスです。お手間をとらせてしまって申し訳ないです。こちらでは、Mac OS X 10.4 + PHP 5.1.6 + symfony 0.6.0 という組み合わせと CentOS + PHP 5.1.6 + symfony 0.6.0 という組み合わせの両方で現象を確認しています。symfonyを「先日のエントリの時点でのbeta」に入れ替えても現象は再現しました。また、先日のエントリを記述する際に念のため symfony を利用している日本語サイトもいくつか見てみましたが、Mobilityでは同様の現象が確認できましたので、当方の環境でのみ発生する問題でもないと思っていたのですが、問題が起きていない人のほうが多いのでしょうか。

その後色々と調べてみた結果、そもそも symfony に問題があるわけではなく、DomDocumentの挙動に問題があるような気がしてきました。以下のような test1.html を用意して

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>テスト1</title>
  </head>

  <body>

    <h1>テスト1</h1>
    <p>
      あいうえお。
      Hello World
    </p>

  </body>
</html>

次のスクリプトを実行すると、私の環境では見事に日本語が実体参照として表示されてしまいます。

<?php
$xml = file_get_contents('test1.html');
$doc = new DomDocument('1.0', 'UTF-8');
$doc->loadHTML($xml);

print $doc->saveHTML();
?>

以下、実行結果。

$ php test.php
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>&#12486;&#12473;&#12488;&#65297;</title>
</head>
<body>
<h1>&#12486;&#12473;&#12488;&#65297;</h1>
<p>
      &#12354;&#12356;&#12358;&#12360;&#12362;&#12290;
      Hello World
    </p>
</body>
</html>

先日のエントリに対して ray さんという方からも、

はじめまして。私もこれに困っていたんですが(PHPの設定を変えても意味無く)、
http://ishikawa.arielworks.com/memo/2004/12/20
を参照しまして、もしやと思い $save->HTML() を $save->XML() に変えてみたところ、実態参照に変換されなくなりました。また、 $save->HTML ですと がに変えられてしまうんですが、こちらも変換されなくてすみました。内容がXHTMLでも大丈夫みたいですね。

というコメントを頂いており(一部、タグを入力してもらった部分が消えてしまっているようです)、やっぱり今回の現象の根本は DomDocument ではないかなあと思っています。

それから、symfony は仕事で使っているだけで guesswork の開発もゆっくりではありますが続けています。

か., 10 月 6th, 2006 at 13:28 [Comment]

Mac OS X 10.4 PPC
PHP 5.1.6 (on Xcode gcc-3.3)
で上記のtest.php動かしても実体参照になりませんでした。

http://ml.php.gr.jp/pipermail/php-dev/2006-September/001313.html
このスレッドで出ているMacの環境です。

DOMまわりのphp.iniの設定か、コンパイルオプションのせいですかね?

Angelic Wing, 10 月 8th, 2006 at 21:03 [Trackback]

[php symfony] SymfonyのFillinきn(ry…

とりあえずこっちでも試してみた。
PHPのバージョンは5.1.6。問題起きてないように見える。
じゃあ、後は何が問題になりうるかというと、libxmlのバージョンくらいかなぁ。
設定項目…


使用可能なタグ <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>