php curl选择框值

时间:2013-06-06 15:01:46

标签: php regex curl

我正在尝试从一个网站获取选择列表的值(preg_match)。

网站上的HTML:

<select name="country_id" id="country_id">
    <option value="vi">Vietnam</option>
    <option value="en">English</option>
    <option value="fr">France</option>
</select>

我已尝试使用下一个代码,但没有成功:

<?php

    $ch = curl_init();

    $url = "<url_of_website>"; 

    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    $result=curl_exec($ch);

    preg_match_all('/<select name="country_id" id="country_id">(.*)<\/select>/msu', $result, $matches);
    print_r($matches);

    curl_close ($ch);

?>

我希望得到如下结果:vi,en,fr

有人可以帮助我吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

根据您的需要解析DOM将会是这样的

假设此HTML位于您要求的页面中

<select name="country_id" id="country_id">
    <option value="vi">Vietnam</option>
    <option value="en">English</option>
    <option value="fr">France</option>
</select>

这个PHP会找到option元素的值

<?php

$doc = new DOMDocument();
$doc->loadHTMLFile('<url_of_website>');
$xpath = new DOMXPath($doc);

$options = $xpath->query('*/select[@id="country_id"]/option');

$values = array();
foreach ($options as $option) {
    $values[] = $option->getAttribute('value');
}

print_r($values);

编辑以展示如何从URL解析DOM而不是变量中的某些HTML

答案 1 :(得分:1)

您可以使用DOMDocument:

$html = <<<LOD
<select name="country_id" id="country_id">
    <option value="vi">Vietnam</option>
    <option value="en">English</option>
    <option value="fr">France</option>
</select>
LOD;

$doc = new DOMDocument();
@$doc->loadHTML($html);
$optionNodes = $doc->getElementById('country_id')->getElementsByTagName('option');
foreach($optionNodes as $optionNode) {
    echo $optionNode->getAttribute('value') . '<br/>';
}