dポイントプレゼントキャンペーン実施中!

Zend_Dom_Queryを使ってHTMLを読み込み、そこで抽出した文字列を
1文字ずつ分解して配列に収める作業を下のプログラムではしているのですが、
得られた配列には空白のような値が入ってきてしまいます・・・
どうやら下の場合は<BODY>~</BODY>間にある改行が原因(改行なしで<BODY>あいう</BODY>なら空白は発生しませんでした)
らしいのですが、文字をmb_substrで分割するときに入り込んでいるようなのです。
その空白をプログラムでマッチさせて消そうとしたのですが、emptyとかnullとかいろいろ試したのですが
その空白にはマッチしないのです・・・
どうやればこの空白を消せることができるのでしょうか?

$doc = <<<EOF
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE></TITLE>
<BODY>
あいう
</BODY>
</HTML>
EOF;

$dom_query = new Zend_Dom_Query();
$dom_query->setDocument($doc);
$results = $dom_query->query("body");
$arr = array();
foreach ($results as $domelement) {
$str = $domelement->nodeValue;
}
$enc = mb_detect_encoding($str, 'ASCII,JIS,UTF-8,EUC-JP,SJIS');
$res = array();
while ($len = mb_strlen($str, $enc))
{
array_push($res, mb_substr($str, 0, 1, $enc));
$str = mb_substr($str, 1, $len, $enc);
}
print_r($res);//Array ( [0] => [1] => [2] => あ [3] => い [4] => う [5] => [6] => )
//↓マッチしない
if(empty($res[0])) {
unset($res[0]);
}

A 回答 (2件)

思いつきで書いてるので、見当違いな事いってるかもしれません。



その空白を ord() すると なんて出ます?

print ord($res[0]);

empry()自体 使う事がないので 動作が良く分かってないんですけど、空白と認識しない以上は なんか入ってるんだろうなと思うのですが。

あと、trim() してみても一緒ですかね?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
trim() で除去できました!ありがとうございます。
ordの方は、

print ord($res[0]);//13
print ord($res[1]);//10
print ord($res[2]);//227
print ord($res[3]);//227

という結果でした。
この結果からどういうことが推測できるのでしょうか?

お礼日時:2011/09/30 14:55

> この結果からどういうことが推測できるのでしょうか?



↓アスキーコード表
http://www.cppll.jp/cppreference/ascii.html

227が何かは分かりませんが、13と10は Windowsの改行コードですね。

CRLF とか \r\n とかで表現されるものです。

Linuxだと LFのみ、Macだと CRのみ とかの改行コードだったように記憶してます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
なるほど、参考になりました。

お礼日時:2011/10/01 00:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!