2012年6月 3日

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

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@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2012年6月 3日 01:21
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/110837
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。