PHP - 如何从html中提取此值?

时间:2013-08-06 11:18:46

标签: php parsing xpath

HTML:

<input type="hidden" id="_wpnonce" name="_wpnonce" value="12345678" />
<input type="hidden" name="_wp_http_referer" value="someurl/?album=1&amp;gallery=15" />

我需要获取gallery的ID,在这种情况下为15

我是如何尝试实现此目的的:

$html = <input type="hidden" id="_wpnonce" name="_wpnonce" value="12345678" />
<input type="hidden" name="_wp_http_referer" value="someurl/?album=1&amp;gallery=15" />";
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXpath( $dom);
$galleryid = $xpath->query(//how to get gallery id?); 

5 个答案:

答案 0 :(得分:1)

您可以使用parse_url函数来获取查询字符串值。查看parse_url function manual

例如:

$url = 'http://example.com/path?arg=value#anchor';   
print_r(parse_url($url));

答案 1 :(得分:0)

更新我的答案,提供了更多详细信息。

您要使用的xQuery路径是(这是基于您提供的html,即输入节点位于文档的根目录)

/input[@name='_wp_http_referer']/@value

这将允许您从输入字段中提取值。完成后,您可以使用正则表达式进行提取,以构建上面的示例

$html = <input type="hidden" id="_wpnonce" name="_wpnonce" value="12345678" />
<input type="hidden" name="_wp_http_referer" value="someurl/?album=1&amp;gallery=15" />";
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXpath( $dom);
$referer = $xpath->evaluate("/input[@name='_wp_http_referer']/@value"); 

if(!empty($referer))
{
    $doesMatch= preg_match("/gallery\=(\d+)/", $referer, $matches);
    if($doesMatch > 0)
    {
        $gallery=$matches[1];
    }
}

答案 2 :(得分:0)

$html = <input type="hidden" id="_wpnonce" name="_wpnonce" value="12345678" />
<input type="hidden" name="_wp_http_referer" value="someurl/?album=1&amp;gallery=15" />";
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXpath( $dom);
$galleryid = $xpath->query('//input')->item(1); //get second input
parse_str($galleryid);
echo $gallery;

答案 3 :(得分:0)

如果您需要一个简单的解决方案:

$found = preg_match('/gallery=[0-9]+/', $html, $match);
$gallery_id = (int)substr($match[0], strlen("gallery="));

答案 4 :(得分:0)

这很简单,可以使用XPath 1.0执行字符串操作。

substring-after(//input/@value, 'gallery=')

然而,在另一个答案中使用parse_url之类的建议可能是更优雅的解决方案,但这取决于您的用例。使用XPath字符串操作可能是合理的,例如,如果您需要将此作为中间结果用于在谓词中进行过滤。