重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

関数を使って、 外部サイトより取得した値のカンマと円を取り除いていますが、その中で、わからないことがありますので質問します。下記のコードは、Simple HTML Domを利用して、たからくじ発表サイトより(ロト6)の結果を取得したものです。取得したものをそれぞれ変数$info[ ]に入れて、それらを関数に入れて、カンマと円を取り除いています。下記のコードでは、$info[20]に入っているものを表示しています。

【コード】
<?php
function val($str){
if(!preg_match("/^[0-9]+$/",$str)){
$str =intval(preg_replace('/[^0-9]+/', '', $str));
}
$str = intval($str);
return $str;
}

require_once('simple_html_dom.php');
$html = file_get_html( 'http://www.mizuhobank.co.jp/takarakuji/loto/loto … );
$number = $html->find( '.typeTK th')[1];

for($i = 0; $i < 21; $i++){ //配列に格納
$info[$i] = $html->find( '.typeTK td')[$i];
}


echo $info[20]."<br>";    //取得した値。254,791,972円 と表示
echo val($info[20])."<br>";  // 2147483647 と表示される ??? なぜ

$test = '254,791,972円';    //関数のテストの為 $info[20]と同等の値を$testに入れます。

echo $test."<br>";      //254,791,972円 と表示
echo val($test)."<br>";    //関数はしっかり機能しています。254791972 と表示

?>


例えば、$info[20]で 取得した値は echoで 254,791,972円 と表示されるので、これに関数を適用して、val($info[20]) とすると、表示値が、2147483647 本来なら、254791972 とカンマと円が抜けた値が表示されるはずなのですが。

そこで、関数val()に問題があるのかと思ったので、テストとして、
同等の値を $test = '254,791,972円'; 作り、同様に表示を確認してみました。こちらは、しっかりと、カンマと円が抜けた値が表示されるので、関数には問題ないことが分かりました。

従って、どこが悪いのかがわかないので、アドバイスください。よろしくお願いします。

A 回答 (2件)

echo htmlspecialchars($info[20]);


で、確認してみては?
なにかエスケープシークエンスで
ひっかかってるのかも
    • good
    • 0
この回答へのお礼

ありがとうございます。 このような場合にでも、htmlspecialcharsを使うことがあるのですね。とても勉強になります。

お礼日時:2016/06/08 19:40

「エスケープシークエンス」ではないけど「余計なもの」が入っているという点では正解>#1.



find( '.typeTK td')

クラス属性が typeTK である要素の子孫となる「td 要素」がとれる
ことを分かっているかどうか, だねぇ.
    • good
    • 1
この回答へのお礼

ありがとうございます。 たしかに、このとりかただと、いらないものが入ってきてました。

お礼日時:2016/06/09 22:42

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