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" />

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?); 
4

5 回答 5

1

您可以使用该parse_url函数来获取查询字符串值。检查parse_url功能手册

例如:

$url = 'http://example.com/path?arg=value#anchor';   
print_r(parse_url($url));
于 2013-08-06T11:37:50.693 回答
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];
    }
}
于 2013-08-06T11:32:17.017 回答
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;
于 2013-08-06T11:36:05.540 回答
0

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

$found = preg_match('/gallery=[0-9]+/', $html, $match);
$gallery_id = (int)substr($match[0], strlen("gallery="));
于 2013-08-06T12:05:49.803 回答
0

这是可以使用 XPath 1.0 执行的足够简单的字符串操作。

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

然而,使用parse_urllike 在另一个答案中提出的方法可能是更优雅的解决方案,但这取决于您的用例。使用 XPath 字符串操作可能是合理的,例如,如果您需要将其用作在谓词中过滤的中间结果。

于 2013-08-06T12:25:03.200 回答