Symfony2でユニットテストを書いていたところ
$client = static::createClient();
$crawler = $client->request('GET', '/top');
$this->assertTrue($crawler->filter('html:contains("日本語文字列")')->count() > 0);
の結果が期待値ではなく、テンプレートの文字コードもutf-8だったので(他はコンソール生成のものを使ってましたので)、おかしいなと調べていたところ
DOMDocumentの文字化けの記事にたどり着いたので
Symfony/Component/DomCrawler/Crawler.php 内の
addHtmlContentメソッドに
$content =mb_convert_encoding($content, 'HTML-ENTITIES', ' ASCII, JIS, UTF-8, EUC-JP, SJIS');
を追加することで回避できました。
public function addHtmlContent($content, $charset = 'UTF-8')
{
++ $content =mb_convert_encoding($content, 'HTML-ENTITIES', ' ASCII, JIS, UTF-8, EUC-JP, SJIS');
$dom = new \DOMDocument('1.0', $charset);
$dom->validateOnParse = true;
@$dom->loadHTML($content);
$this->addDocument($dom);
$base = $this->filter('base')->extract(array('href'));
if (count($base)) {
$this->uri = current($base);
}
}
一応、こちらは https://github.com/symfony/symfony/issues/2115 にとりあえずチケットを出してみました。
もし、$this->assertTrue($crawler->filter('html:contains("日本語文字列")')->count() > 0);で普通にうまくいったよ!とか、やっぱりうまくいかないといった情報があれば教えて頂けると幸いです。
☆--------------------------------------------------------------------☆
mail:in...@miio.info
Twitter:@ayako119
Kawaz:http://www.kawaz.org/members/miiojp/
くりすみぃお
☆--------------------------------------------------------------------☆
issueの方みてみましたが、試されているHTMLで
<meta charset="UTF-8">
の部分を
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
と書き換えると、きちんと動作しているように見えます。
(少なくとも私の開発したもので、このようなテストはこれまでに多数書いてきていますし)
issueの方でコメントされているように、Symfonyの問題じゃなくてPHPの問題と思われるので、そちらの
解決を待つか、この部分のみHTML5ではなくて、上のような古い書き方にしてやる回避方法などを使うと
よいのではないでしょうか。
2011年9月7日4:53 <in...@miio.info>:
> --
> -------------------
> Symfonyに関する疑問・質問、ユーザー会の活動やサイトに対するご意見、その他雑談など、お気軽にMLへ投稿してください!
>
>
> 日本Symfonyユーザー会
> http://www.symfony.gr.jp/
>
> 日本Symfonyユーザー会メーリングリスト
> http://groups.google.com/group/symfony-users-ja
>
--
//----------------------------------------------------------
iNNX Corp. Hidenori GOTO
hide...@innx.co.jp
http://www.innx.co.jp/
インクス株式会社 後藤 秀宣
//----------------------------------------------------------