0

Simple HTML DOM 库用于从网页中提取时间戳。strtotime然后用于将提取的时间戳转换为 MySQL 时间戳。

问题:strtotime()用于有效时间戳时,NULL返回(参见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));

第二个例子

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 回答