Symfony2 ユニットテストで日本語文字列が期待値を返さない

567 views
Skip to first unread message

in...@miio.info

unread,
Sep 6, 2011, 3:53:14 PM9/6/11
to symfony-...@googlegroups.com
みぃお@札幌です。お世話になります。

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/
くりすみぃお
☆--------------------------------------------------------------------☆

Hidenori GOTO

unread,
Sep 6, 2011, 6:44:03 PM9/6/11
to symfony-...@googlegroups.com
後藤です


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/

インクス株式会社 後藤 秀宣
//----------------------------------------------------------

in...@miio.info

unread,
Sep 7, 2011, 1:20:54 AM9/7/11
to symfony-...@googlegroups.com, in...@miio.info
みぃお@札幌です。

DOMDocumentがHTML5のmetaに対応できてない と考えるのが自然のようですね。。。

一応チケットのほうに回避案も上がっていて、fabpotさんに聞いてみるような感じのお返事を頂けたので、期待してみようかなと思います。

rejectされたら後藤さんの方法で回避しようかと思います。

ありがとうございます。


☆--------------------------------------------------------------------☆
mail:in...@miio.info
Twitter:@ayako119
Kawaz:http://www.kawaz.org/members/miiojp/
くりすみぃお
☆--------------------------------------------------------------------☆

Reply all
Reply to author
Forward
0 new messages