更新 :( html5lib问题的底部)似乎接近,我只需要提高我对它如何使用的理解.
我正在尝试为PHP 5.3找到兼容HTML5的DOM解析器.特别是,我需要在脚本标记中访问以下类似HTML的CDATA:
<script type="text/x-jquery-tmpl" id="foo">
<table><tr><td>${name}</td></tr></table>
</script>
Run Code Online (Sandbox Code Playgroud)
大多数解析器都会过早地解析,因为HTML 4.01 在标记</内部找到ETAGO()时会结束脚本标记解析<script>.但是,HTML5 允许</之前</script>.到目前为止,我尝试过的所有解析器都失败了,或者它们的文档记录很差,以至于我还没弄清楚它们是否有效.
我的要求:
输入:
<script id="foo"><td>bar</td></script>
Run Code Online (Sandbox Code Playgroud)
输出失败的示例(无关闭</td>):
<script id="foo"><td>bar</script>
Run Code Online (Sandbox Code Playgroud)
一些解析器及其结果:
资源:
<?php
header('Content-type: text/plain');
$d = new DOMDocument;
$d->loadHTML('<script id="foo"><td>bar</td></script>');
echo $d->saveHTML();
Run Code Online (Sandbox Code Playgroud)
输出:
Warning: DOMDocument::loadHTML(): Unexpected end tag : td in Entity, line: 1 in /home/adam/public_html/2010/10/26/dom.php on line 5
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><head><script id="foo"><td>bar</script></head></html> …Run Code Online (Sandbox Code Playgroud) 可能重复:
解析HTML的最佳方法
我如何解析PHP变量中保存的HTML代码,如下所示:
<h1>T1</h1>Lorem ipsum.<h1>T2</h1>The quick red fox...<h1>T3</h1>... jumps over the lazy brown FROG!
Run Code Online (Sandbox Code Playgroud)
我想只得到标题之间的文本,我理解使用正则表达式不是一个好主意.
我一直在使用正则表达式在PHP中进行一些HTML抓取.这有效,但结果是挑剔和脆弱.有没有人使用任何提供更强大解决方案的软件包?配置驱动的解决方案是理想的,但我不挑剔.
使用PHP,我如何从$ foo中隔离src属性的内容?我正在寻找的最终结果只会给我" http://example.com/img/image.jpg "
$foo = '<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />';
Run Code Online (Sandbox Code Playgroud) 我在尝试忽略某些字符之间的空格时遇到了问题.我一直在谷歌搜索几天,似乎无法找到正确的解决方案.
这是我的代码:
// Get Image data
preg_match('#<a href="(.*?)" title="(.*?)"><img alt="(.*?)" src="(.*?)"[\s*]width="150"[\s*]height="(.*?)"></a>#', $data, $imagematch);
$image = $imagematch[4];
Run Code Online (Sandbox Code Playgroud)
基本上这些是我的一些场景:
<a href="/wiki/File:Sky1.png" title="File:Sky1.png"><img alt="Sky1.png" src="http://media-mcw.cursecdn.com/thumb/5/56/Sky1.png/150px-Sky1.png"width="150" height="84"></a>
Run Code Online (Sandbox Code Playgroud)
(注意width =""和src =""之间没有空格)
和
<a href="/wiki/File:TallGrass.gif" title="File:TallGrass.gif"><img alt="TallGrass.gif" src="http://media-mcw.cursecdn.com/3/34/TallGrass.gif" width="150"height="150"></a>
Run Code Online (Sandbox Code Playgroud)
(注意在width =""和height =""之间缺少空格.)
无论如何要忽略这些角色之间的空白?因为我不是正则表达式专家.
我决定在xml文件中保存设置,因为字段只有一个值.
我的XML文件就像
<?xml version="1.0" encoding="UTF-8"?>
<setting>
<setting1>setting1 value</setting1>
<setting2>setting2 value</setting2>
<setting3>setting3 value</setting3>
....
....
....
</setting>
Run Code Online (Sandbox Code Playgroud)
谁能建议我一个简单的PHP脚本来读取,编辑,添加和删除节点和节点值?
我刚刚开始阅读有关DOM的文档和示例,以便抓取和解析文档.
例如,我有部分文件如下所示:
<div id="showContent">
<table>
<tr>
<td>
Crap
</td>
</tr>
<tr>
<td width="172" valign="top"><a href="link"><img height="91" border="0" width="172" class="" src="img"></a></td>
<td width="10"> </td>
<td valign="top"><table cellspacing="0" cellpadding="0" border="0">
<tbody><tr>
<td height="30"><a class="px11" href="link">title</a><a><br>
<span class="px10"></span>
</a></td>
</tr>
<tr>
<td><img height="1" width="580" src="crap"></td>
</tr>
<tr>
<td align="right">
<a href="link"><img height="16" border="0" width="65" src="/buy"></a>
</td>
</tr>
<tr>
<td valign="top" class="px10">
<p style="width: 500px;">description.</p>
</td>
</tr>
</tbody></table></td>
</tr>
<tr>
<td>
Crap
</td>
</tr>
<tr>
<td>
Crap
</td>
</tr>
</table>
</div>
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用以下代码来获取所有tr标记并分析其中是否存在垃圾或信息:
$dom …Run Code Online (Sandbox Code Playgroud) 我正在尝试用PHP解析一些带有DOM的HTML,但是我遇到了一些问题.首先,如果这改变了解决方案,我所拥有的HTML不是一个完整的页面,而是它只是它的一部分.
<!-- This is the HTML that I have --><a href='/games/'>
<div id='game'>
<img src='http://images.example.com/games.gif' width='300' height='137' border='0'>
<br><b> Game </b>
</div>
<div id='double'>
<img src='http://images.example.com/double.gif' width='300' height='27' border='0' alt='' title=''>
</div>
</a>
Run Code Online (Sandbox Code Playgroud)
现在我试图只获得带有id的div double.我已经尝试了以下代码,但它似乎没有正常工作.我可能做错了什么?
//The HTML has been loaded into the variable $html
$dom=new domDocument;
$dom->loadHTML($html);
$dom->preserveWhiteSpace = false;
$keepme = $dom->getElementById('double');
$contents = '<div style="text-align:center">'.$keepme.'</a></div>';
echo $contents;
Run Code Online (Sandbox Code Playgroud) 可能重复:
如何使用PHP解析和处理HTML?
我正在研究PHP的HTML DOM解析器.我发现了PHP Simple HTML DOM Parser.还有其他我应该看的吗?
有没有更好的方法来解析无效的HTML然后应用Tidy?
旁注:有些情况下你不能提供Tidy.我还不建议使用Regexp来解析html.
php ×10
html ×4
dom ×3
parsing ×3
regex ×2
domdocument ×1
html-parsing ×1
html5 ×1
preg-match ×1
string ×1
xml ×1
xml-parsing ×1