说我有这样的数据:
<option value="abc" >Test - 123</option>
<option value="def" >Test - 456</option>
<option value="ghi" >Test - 789</option>
使用PHP,我如何对HTML标记进行排序,从选项值中返回所有文本。例如,根据上面的代码,我想返回'Test - 123','Test - 456','Test - 789'。
感谢您的帮助!
更新 所以我更清楚 - 我正在使用filegetcontents()从网站获取html。出于我的目的,我希望能够对html进行排序,找到选项值并输出它们。在这种情况下,返回'测试 - 123','测试 - 456'等
答案 0 :(得分:3)
有很多方法,其中一种方法最好取决于你提出的更多细节 一种可能性:DOMDocument and DOMXPath
<?php
$doc = new DOMDocument;
$doc->loadhtml('<html><head><title>???</title></head><body>
<form method="post" action="?" id="form1">
<div>
<select name="foo">
<option value="abc" >Test - 123</option>
<option value="def" >Test - 456</option>
<option value="ghi" >Test - 789</option>
</select>
</div>
</form>
</body></html>');
$xpath = new DOMXPath($doc);
foreach( $xpath->query('//form[@id="form1"]//option') as $o) {
echo 'option text: ', $o->nodeValue, " \n";
}
打印
option text: Test - 123
option text: Test - 456
option text: Test - 789
答案 1 :(得分:1)
此代码会将值加载到数组中,假设您在所显示的选项标记之间有换行符:
// Load your HTML into a string.
$html = <<<EOF
<option value="abc" >Test - 123</option>
<option value="def" >Test - 456</option>
<option value="ghi" >Test - 789</option>
EOF;
// Break the values into an array.
$vals = explode("\n", strip_tags($html));
答案 2 :(得分:1)
如果您不仅仅是像上面提到的那样的破裂,请使用像DOMDocument这样的真实解析器,您可以使用DOMXPath来完成。
否则请与preg_match_all
一起尝试此正则表达式:
<option(?:[^>"']+|"[^"]*"|'[^']*')*>([^<]+)</option>
答案 3 :(得分:0)
使用strip_tags
,除非我误解了这个问题。
$string = '<option value="abc" >Test - 123</option>
<option value="def" >Test - 456</option>
<option value="ghi" >Test - 789</option>';
$string = strip_tags($string);
更新:错过了您在问题中松散指定数组。在这种情况下,我确信有一个更干净的方法,我会做类似的事情:
$teststring = '<option value="abc" >Test - 123</option>
<option value="def" >Test - 456</option>
<option value="ghi" >Test - 789</option>';
$stringarray = split("\n", strip_tags($teststring));
print_r($stringarray);
更新2:并且只是顶部和尾部,按照您最初的要求呈现它(不是我们可能被误导相信的数组,请尝试以下操作:
$teststring = '<option value="abc" >Test - 123</option>
<option value="def" >Test - 456</option>
<option value="ghi" >Test - 789</option>';
$stringarray = split("\n", strip_tags($teststring));
$newstring = join($stringarray, "','");
echo "'" . $newstring . "'\n";
答案 4 :(得分:0)
http://networking.ringofsaturn.com/Web/removetags.php
preg_match_all("s/<[a-zA-Z\/][^>]*>//g", $data, $out);
答案 5 :(得分:0)
如果我们正在做正则表达式的东西,我喜欢这种类似perl的语法:
$test = "<option value=\"abc\" >Test - 123</option>\n" .
"<option value=\"abc\" >Test - 456</option>\n" .
"<option value=\"abc\" >Test - 789</option>\n";
for ($offset=0; preg_match("/<option[^>]*>([^<]+)/",$test, $matches,
PREG_OFFSET_CAPTURE, $offset); $offset=$matches[1][1])
print($matches[1][0] . "\n");'