[PHP-users 35722] Re: DOMDocumentの文字化けに悩んでおります

Yoshi Saito yk_mailing @ excite.co.jp
2012年 6月 4日 (月) 00:20:34 JST


MugeSoさん、ご返答ありがとうございます。

リンクありがとうございます。



>素のlibxml2はsjisは扱えません
というのが自分には分かりませんでした。

iconvは
php.iniで確認すると、
iconv support 	enabled 
iconv.input_encoding	UTF-8	UTF-8
iconv.internal_encoding	ISO-8859-1	ISO-8859-1
iconv.output_encoding	ISO-8859-1	ISO-8859-1

となっております。
有効にはなっていると思うのですが、
internal_encodingなどが影響があるのでしょうか?





"MugeSo"<mugeso @ mugeso.com> wrote:
> MugeSoです。
> 
> ちょうど先日、hnwさんがPHP勉強会@東京で発表されていた話題ですね。
> http://www.slideshare.net/hnw/php-13085852
> 
> 上記スライドに書いてあるようにDOMDocumentでの文字コード処理にmb_*は関係
> ありません。
> また、素のlibxml2はsjisは扱えません。
> iconvが入っていればあるいはうまくいくかもしれませんよ。
> 
> 
> (2012/06/03 1:21), yk_mailing @ excite.co.jp wrote:
> > cURLでサイトから文章を取得してきて、
> > HTMLをDOMDocumentにて必要な部分だけを抽出する、
> > という事をしたいと考えているのですが、文字化けします。
> > 以下の$target_urlはShift_JISにて書かれているようですが、mb_convert_encoding()を使ってもダメです。
> > この一連の操作で、いつも文字化けに悩まされます。
> > 
> > 自分のPHPスクリプトの問題もあるかもしれませんし、PHP_cURLの方にそもそも問題があるのかもしれませんし、もしくは自分のphp.iniの方に問題があるのかもしれません。
> > どのようにすれば解決できるのでしょうか?
> > ご教授頂けたらと思います。
> > 宜しくお願いします。
> > 
> > 
> > 実際のコードとは違うので、もしかしたら間違いがあるかもしれません。
> > PHP5.3
> > Windows7 64bit
> > 
> > 
> > <?php
> > error_reporting(E_ALL | E_STRICT);
> > define('DS', DIRECTORY_SEPARATOR);
> > define('PS', PATH_SEPARATOR);
> > require_once 'lib' . DS . 'simplecURL.php';
> > mb_detect_order('eucJP-win,UTF-8,SJIS-win,jis');
> > 
> > /**
> >   *   $top_urlから各記事のURLが取得できない。
> >   *   仕方がないので他サイトの日付を使う
> >   *    (↑自分はhttp://cgi2.nhk.or.jp/e-news/index.cgiから同様の処理をして取っています)
> >   */
> > 
> > if (isset($_POST['abc']))
> > {
> > 	$site_name = "abc";
> > 	$target_url = "http://www.nhk.or.jp/worldwave/abc/popup/abc120423.html";
> > 	$body_xPath_en = "//p[@class="en"]/text()";
> > 	$body_xPath_ja = "//div[@class="paragraph clearfix"]//p[@class="ja"]/text()"
> > 	$body_xPath_ex = "//p[@class="comment"]//text()";
> > 	$text = get_text($target_url, $body_xPath_en, $body_xPath_ja, $body_xPath_ex);
> > 	var_dump($text);
> > }
> > 
> > function get_text ($target_url, $body_xPath_en, $body_xPath_ja, $body_xPath_ex)
> > {
> > /**
> >   *   以下のSimplecURL classはhttp://www.php.net/manual/ja/curl.examples-basic.phpと
> >   *   それほど変わりません。
> >   *   set_option()を色々付けているだけです。
> >   */
> > 	$http = new SimplecURL($target_url);
> > 	$html = $http->execute();
> > 	$doc = new DOMDocument();
> > 	@$doc->loadHTML($html);
> > 	$xpath = new DOMXPath($doc);
> > 
> > 	$extracts = $xpath->query($body_xPath_en);
> > 	$abc_pattern1 = "|</?(br|span).*?>|i";
> > 	foreach ($extracts as $value)
> > 	{
> > 		$result = trim($value->nodeValue);
> > 		$result = preg_replace($abc_pattern1, '', $result);
> > 		$results["en"][] = trim($result);
> > 	}
> > 
> > 	$extracts = $xpath->query($body_xPath_ja);
> > 	foreach ($extracts as $value)
> > 	{
> > 		$result = trim($value->nodeValue);
> > 		$result = mb_convert_encoding($result, 'UTF-8', 'Shift-JIS');
> > 		$results["ja"][] = $result;
> > 	}
> > 
> > 	$extracts = $xpath->query($body_xPath_ex);
> > 	foreach ($extracts as $value)
> > 	{
> > 		$result = trim($value->nodeValue);
> > 		$result = mb_convert_encoding($result, 'UTF-8', 'Shift-JIS');
> > 		$results["ex"][] = $result;
> > 	}
> > 	return $results;
> > }
> > _______________________________________________
> > PHP-users mailing list  PHP-users @ php.gr.jp
> > http://ml.php.gr.jp/mailman/listinfo/php-users
> > PHP初心者のためのページ - 質問する前にはこちらをお読みください
> > http://oldwww.php.gr.jp/php/novice.php3
> > 
> 
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
> 
Yoshi Saito


PHP-users メーリングリストの案内