我有一个代码可以在 .html 文件中搜索标记,但我在执行脚本时遇到问题,导致我找到未定义的索引。
在我之前的QUESTION上我询问有关搜索 ID标记的信息,并且我没有引导我将其用作参考。增强代码并正确执行代码,但它显示错误。错误会搜索 .html文件中的每个 id标记
CODE:
<?php
function getElementById($matches)
{
global $data;
return $matches[1].$matches[3].$matches[4].$data[$matches[3]].$matches[6];
}
$data['test'] = 'A';
$filename = 'test.html';
$html = file_exists($filename) ? file_get_contents($filename) : die('can\'t open the file');
$_HTML = preg_replace_callback('#(<([a-zA-Z]+)[^>]*id=")(.*?)("[^>]*>)([^<]*?)(</\\2>)#ism', 'getElementById', $html);
echo $_HTML;
?>
HTML:
<html>
<head>
<title>TEST</title>
</head>
<body>
<div id="test"></div>
<div id="test2"></div>
</body>
</html>
输出:PRINTSCREEN
答案 0 :(得分:2)
以下是如何实现默认值:
$data3 = isset($data[$matches[3]]) ? $data[$matches[3]] : 'default';
return $matches[1].$matches[3].$matches[4].$data3.$matches[6];
答案 1 :(得分:1)
免责声明:您不应该使用HTML执行所有这些正则表达式的内容,等等......等等...
但如果你坚持
function getElementById($matches)
{
global $data;
return $matches[1]
.$matches[3]
.$matches[4]
.isset($data[$matches[3]]) ? $data[$matches[3]] : 'DEFAULT_VALUE'
.$matches[6];
}
为什么不使用正则表达式?
https://stackoverflow.com/a/1732454/156811
Using regular expressions to parse HTML: why not?
http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html
如果您进行快速搜索,我相信您可以找到更多
一些替代方案:
http://simplehtmldom.sourceforge.net/
等
答案 2 :(得分:0)
正则表达式并不是真正的正确方法。我建议你使用XPATH或类似的东西。你也可以使用这样的东西:
答案 3 :(得分:0)
我不明白你的问题是什么?
您有一个未定义的索引错误是100%正常。
在您的HTML中,定义了2个ID:'test'和'test2'。
您的PHP代码找到这两个ID并在$ data中查找条目, 但是,$ data只包含'test'的条目, 所以PHP告诉你'test2'没有条目:注意:未定义的索引:test2
就是这样: - )