我正在尝试从一个网站获取选择列表的值(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
有人可以帮助我吗?
谢谢。
答案 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/>';
}