有没有更好的方法来解析无效的HTML然后应用Tidy?
旁注:有些情况下你不能提供Tidy.我还不建议使用Regexp来解析html.
可能重复:
使用php抓取一个html页面?
解析HTML的最佳方法
我的php脚本中有一个字符串变量,它包含html-page.我如何从这个字符串中提取DOM元素?
例如,在这个字符串中'<div class="someclass">text</div>',我希望得到变量'text'.我怎么能这样做?
我在使用正则表达式匹配html属性(在各种html标签中)时遇到问题.为此,我使用模式:
myAttr=\"([^']*)\"
Run Code Online (Sandbox Code Playgroud)
HTML片段:
<img alt="" src="1-p2.jpg" myAttr="http://example.com" class="alignleft" />
Run Code Online (Sandbox Code Playgroud)
它从myAttr最后选择文本,/>但我需要选择myAttr="..."(" http://example.com ")
我想img从这样的JSON数据中返回的文本中获取标记.我想从字符串中抓取这个:
<img class="img" src="https://fbcdn-photos-c-a.akamaihd.net/hphotos-ak-frc3/1239478_598075296936250_1910331324_s.jpg" alt="" />
Run Code Online (Sandbox Code Playgroud)
我必须使用什么正则表达式来匹配它?
我使用了以下内容,但它不起作用.
"<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>"
Run Code Online (Sandbox Code Playgroud) 我需要以不区分大小写的方式查找和替换所有文本匹配项,除非文本位于锚标记内 - 例如:
<p>Match this text and replace it</p>
<p>Don't <a href="/">match this text</a></p>
<p>We still need to match this text and replace it</p>
Run Code Online (Sandbox Code Playgroud)
搜索"匹配此文本"只会替换第一个实例和最后一个实例.
[编辑]根据戈登的评论,在这个例子中可能更喜欢使用DOMDocument.我对DOMDocument扩展并不熟悉,并且非常感谢这个功能的一些基本示例.
可能重复:
如何使用PHP解析和处理HTML?
我是PHP的新手.我在字符串变量中有一些页面的body标签文本.我想知道它是否包含一些标签...其中给出了标签名称tag1,如果是,则只从字符串中取出该标签.我怎么能在PHP中做到这一点?
谢谢!!
我正在尝试使用PHP来获取项目的Steam社区市场价格.我拿一个网址(例如:http://steamcommunity.com/market/listings/730/StatTrak%E2%84%A2%20P250%20%7C%20Steel%20Disruption%20%28Factory%20New%29)然后我下载了内容file_get_contents().我试着用这个:
function getInnerHTML($string, $tagname, $closetagname) {
$pattern = "/<$tagname ?.*>(.*)<\/$closetagname>/";
preg_match($pattern, $string, $matches);
return $matches[1];
}
Run Code Online (Sandbox Code Playgroud)
运用
getInnerHTML($str, 'span class="market_listing_price market_listing_price_with_fee"', 'span');
Run Code Online (Sandbox Code Playgroud)
我可以使用file_get_contents的一个例子是:
<span class="market_table_value">
<span class="market_listing_price market_listing_price_with_fee">
$1.92 </span>
<span class="market_listing_price market_listing_price_without_fee">
$1.68 </span>
<br/>
</span>
Run Code Online (Sandbox Code Playgroud)
但它什么也没有回报.
有人有想法吗?
我在使用PHP的DOMDocument解析HTML时遇到了问题.
我正在解析的HMTL具有以下脚本标记:
<script type="text/javascript">
var showShareBarUI_params_e81 =
{
buttonWithCountTemplate: '<div class="sBtnWrap"><a href="#" onclick="$onClick"><div class="sBtn">$text<img src="$iconImg" /></div><div class="sCountBox">$count</div></a></div>',
}
</script>
Run Code Online (Sandbox Code Playgroud)
这个片段有两个问题:
1)buttonWithCountTemplatevar中的HTML 不会被转义.DOMDocument正确地管理它,在解析时转义字符.不是问题.
2)接近结尾,有一个img标签带有未转义的结束标签:
<img src="$iconImg" />
Run Code Online (Sandbox Code Playgroud)
该/>品牌的DOMDocument认为脚本执行完毕,但它缺少结束标记.如果使用getElementByTagName提取脚本,则会在此img标记处关闭标记,其余的将在HTML上显示为文本.
我的目标是删除此页面中的所有脚本,因此如果我执行removeChild()此标记,则会删除标记,但在呈现页面时,以下部分将显示为文本:
</div><div class="sCountBox">$count</div></a></div>',
}
</script>
Run Code Online (Sandbox Code Playgroud)
修复HTML不是一个解决方案,因为我正在开发一个通用的解析器,需要处理所有类型的HTML.
我的问题是,在将HTML提供给DOMDocument之前是否应该进行任何清理,或者是否有选项可以在DOMDocument上启用以避免触发此问题,或者即使我可以在加载HTML之前删除所有标记.
有任何想法吗?
经过一些研究,我发现了DOMDocument解析器的真正问题.请考虑以下HTML:
<div> <!-- Offending div without closing tag -->
<script type="text/javascript">
var test = '</div>';
// I should not appear on the result
</script>
Run Code Online (Sandbox Code Playgroud)
使用以下php代码删除脚本标记(基于Gholizadeh的答案 …
好的,这是一个非常基本的问题我确定但我是PHP新手并且无法弄明白.输入字符串是$ data我试图继续拉动并仅使用第一个匹配.以下是不正确的?这甚至可能不是执行操作的最佳方式,我只是试图在两个html标签之间拉出内容(找到第一个集合)并丢弃其余数据.我知道有类似的问题,我已经阅读了它们,我的问题是混合,如果有更好的方法来做到这一点以及我如何将匹配定义为其余剩余代码的新输入.如果我将$ match更改为$ data2并从那里开始使用它会返回错误.
preg_match('/<h2>(.*?)<\/h2>/s', $data, $matches);
Run Code Online (Sandbox Code Playgroud) 如何<body>使用正则表达式获取标记内的整个内容?
例如,
<html><body><p><a href="#">xx</a></p>
<p><a href="#">xx</a></p></body></html>
Run Code Online (Sandbox Code Playgroud)
我想要归还这个,
<p><a href="#">xx</a></p>
<p><a href="#">xx</a></p>
Run Code Online (Sandbox Code Playgroud)
还是其他更好的想法?也许DOM,但我必须使用saveHTML();它然后它将返回doctype并body标记...
HTML Purifier很难用,所以我决定不使用它.我认为正则表达式可能是我灾难的下一个最佳选择.
php ×8
html ×6
regex ×5
domdocument ×3
html-parsing ×2
parsing ×2
string ×2
arrays ×1
image ×1
preg-match ×1
preg-replace ×1
steam ×1
tags ×1
xpath ×1