0

Simple HTML DOMライブラリは、Webページからタイムスタンプを抽出するために使用されます。strtotime次に、抽出されたタイムスタンプをMySQLタイムスタンプに変換するために使用されます。

問題:strtotime()有効なタイムスタンプで使用されると、NULLが返されます(を参照2:)。ただし、2番目の例でSimple HTML DOMが使用されていない場合、すべてが正しく機能します。

何が起こっているのですか、そしてこれをどのように修正できますか?

出力:

1:2013-03-03, 12:06PM
2:
3:1970-01-01 00:00:00

var_dump($ time)

string(25) "2013-03-03, 12:06PM"

PHP

include_once(path('app') . 'libraries/simple_html_dom.php');

// Convert to HTML DOM object
$html = new simple_html_dom();
$html_raw = '<p class="postinginfo">Posted: <date>2013-03-03, 12:06PM EST</date></p>';
$html->load($html_raw);

// Extract timestamp
$time = $html->find('.postinginfo', 0);
$pattern = '/Posted: (.*?) (.).T/s';
$matches = '';
preg_match($pattern, $time, $matches);
$time = $matches[1];

echo '1:' . $time . '<br>';
echo '2:' . strtotime($time) . '<br>';
echo '3:' . date("Y-m-d H:i:s", strtotime($time));

2番目の例

PHP(動作、単純なHTML DOMなし)

// Extract posting timestamp
$time = 'Posted: 2013-03-03, 12:06PM EST';
$pattern = '/Posted: (.*?) (.).T/s';
$matches = '';
preg_match($pattern, $time, $matches);
$time = $matches[1];

echo '1:' . $time . '<br>';
echo '2:' . strtotime($time) . '<br>';
echo '3:' . date("Y-m-d H:i:s", strtotime($time));

出力(正しい)

1:2013-03-03, 12:06PM
2:1362312360
3:2013-03-03 12:06:00

var_dump($ time)

string(19) "2013-03-03, 12:06PM"
4

1 に答える 1

2

によると、HTMLコードから抽出しvar_dump()た文字列の長さは25文字です。$time

表示される文字列、、の長さ"2013-03-03, 12:06PM"はわずか19文字です。

では、これらの6つの余分な文字はどこにありますか?まあ、それはかなり明白です、本当に:あなたが解析しようとしている文字列は本当に"<date>2013-03-03, 12:06PM"です。ただし、HTMLドキュメントに印刷すると<date>、ブラウザによってHTMLタグとして解析されます。

表示するには、ブラウザの「ソースの表示」機能を使用してください。または、さらに良いことに、HTMLコードを含まhtmlspecialchars()ないはずの変数を出力するときに使用します。

于 2013-03-03T19:11:01.487 に答える