我有一个html文件,index.php我想将该文件<div>的类main中的内容与其他文本替换.我怎样才能实现这一目标?
html中的示例内容:
<div class="main">
Replace this text with some code!
</div>
Run Code Online (Sandbox Code Playgroud)
我希望使用php获取此div中的内容并将其替换为其他内容.但我不知道如何做到这一点.
更新: 我知道使用javascript的客户端技巧.我想做这个服务器端.该文件将是HTML而不是PHP.所以我想我必须在PHP中打开html并执行此操作,但我并不确切如何.
可以使用xpath或html dom解析器或其他东西吗?谷歌搜索给了我这些条款,但我不知道他们实际是什么.
我正在尝试使用PHP Simple HTML DOM Parser来获取外部文件的HTML.该文件包含一个表,目标是找到具有特定数据内容的能力单元格,然后获取下一个兄弟单元格的数据.这些数据需要放在PHP变量中.
基于如何使用PHP解析和处理HTML/XML等文章中的研究和信息?,抓取A元素的href属性,刮擦数据:PHP简单的HTML DOM解析器,当然还有PHP Simple HTML DOM Parser Manual我已经能够产生一些结果,但我担心我可能走错了路.
表格行如下所示:
<tr>
<td>fluff</td>
<td>irrelevant</td>
<td>etc</td>
<td><a href="one">Hello world</a></td>
<td>123.456</td>
<td>fluff</td>
<td>irrelevant</td>
<td>etc</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
我想要完成的是找到包含"Hello world"的表格单元格,然后从下一个td单元格中获取数字.下面的代码找到了表格单元格并回显了它的内容,但我尝试将它用作地标以获取下一个单元格的数据失败了......
$html = file_get_html("http://site.com/stuff.htm");
$e = $html->find('td',0)->innertext = 'Hello world';
echo $e;
Run Code Online (Sandbox Code Playgroud)
所以最终,在上面的例子中,123.456的值需要以某种方式进入PHP变量.
谢谢你的帮助!
$store = curl_exec($ch); // Returns a page of HTML
$doc = new DOMDocument();
$doc->loadHTML($store);
$xpath = new DOMXpath($doc);
Run Code Online (Sandbox Code Playgroud)
瓦尔转储$xpath:
object(DOMXPath)#2 (1) {
["document"] => string(22) "(object value omitted)"
}
Run Code Online (Sandbox Code Playgroud)
这里有什么问题吗?我正在尝试在 HTML 代码上使用 xpath 来提取信息。
object(DOMDocument)#1 (34) {
["doctype"] => string(22) "(object value omitted)"
["implementation"] => string(22) "(object value omitted)"
["documentElement"] => string(22) "(object value omitted)"
["actualEncoding"] => string(6) "gb2312"
["encoding"] => string(6) "gb2312"
["xmlEncoding"] => string(6) "gb2312"
["standalone"] => bool(true)
...
Run Code Online (Sandbox Code Playgroud) 如何HTML使用DOMDocumentin 从文件中提取信息PHP
我的HTML页面里面有这个部分的来源
这是我需要处理的页面中的第三个表:
<table>
<tbody>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
如果我的用法要求我用B和D显示行,我应该如何提取该表的第一行并使用DOMDocument打印它?
我有一个看起来像这样的变量:
$var = '<li data-tpl-classname="class" data-tpl-title="innerHTML"></li>'
Run Code Online (Sandbox Code Playgroud)
我想以某种方式提取 data-tpl-attributes,所以我最终得到一个如下所示的结果数组:
$array = (
'classname' => 'class',
'title' => 'innerHTML'
)
Run Code Online (Sandbox Code Playgroud)
“data-tpl-”属性的数量各不相同,它并不总是一个<li>元素。除此之外,它始终遵循相同的格式:data-tpl-attributename="attributePlacement".
如何在不使用正则表达式的情况下检索这些属性并将它们存储在数组中?我说没有正则表达式,因为在我看来,使用正则表达式解析 html 似乎是一种邪恶的做法,或者在这种情况下可以吗?
有没有办法创建自己的DOMNodeList?例如:
$doc = new DOMDocument();
$elem = $doc->createElement('div');
$nodeList = new DOMNodeList;
$nodeList->addItem($elem); // ?
Run Code Online (Sandbox Code Playgroud)
我的想法是扩展DOMDocument类,添加一些将数据作为DOMNodeList返回的有用方法.
是否可以在不编写自己版本的DOMNodeList类的情况下完成它?
我遇到了一个奇怪的问题.当我尝试使用php-5.3.3使用两个匹配时,看起来我正在使用preg_replace达到某种限制
// works fine
$pattern_1 = '?START(.*)STOP?';
$string = 'START' . str_repeat('x',9999999) . 'STOP' ;
preg_match($pattern_1, $string , $matchedArray ) ;
$pattern_2 = '?START-ONE(.*)STOP-ONE.*START-TWO(.*)STOP-TWO.*?';
// works fine
$string = 'START-ONE this is head stuff STOP-ONE START-TWO' . str_repeat('x', 49970) . 'STOP-TWO' ;
preg_match($pattern_2, $string , $matchedArray_2 ) ;
// didnt work
$string = 'START-ONE this is head stuff STOP-ONE START-TWO' . str_repeat('x', 49971) . 'STOP-TWO' ;
preg_match($pattern_2, $string , $matchedArray_3 ) ;
Run Code Online (Sandbox Code Playgroud)
只有一个匹配的第一个选项使用非常大的字符串并且没有问题.
第二个选项的字符串长度为50,026,工作正常.最后一个选项的字符串长度为50,027(一个),匹配不再有效.由于49971号码在发生错误时可能会有所不同,因此可以将其更改为更大的值以模拟问题.
任何想法或想法?也许这是一个php版本的问题?也许一个可能的解决方法只是只使用一个匹配而不是两个,然后运行preg_match两次?
我有这个:
<h4 class="modal-title" id="exampleModalLabel"> hello </h4>
Run Code Online (Sandbox Code Playgroud)
并且我想使用它提取问候词并将其id分配给php var,但我不知道。如果是输入,会更容易,但是我必须使用其他元素。
我正在尝试div.element使用>组合器选择父母的(直接)孩子,但它失败了.
HTML:
<div class="element">
<p>test</p>
</div>
<div class="element">
<div class="selected">
<p>test2</p>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
PHP:
$html->find('div.element > p', 0);
Run Code Online (Sandbox Code Playgroud)
我期待选择直接p元素.
如果它是嵌套的后代 - 它不应返回任何内容,但它会返回test2.
我该如何写回来test,但不是test2吗?谢谢
更新:关于SO的一般共识似乎是简单的HTML DOM是坏的.我最后DOMDocument根据Phil 的建议使用PHP编写代码.我测试了Nevermind的解决方案,它确实也有效.感谢所有帮助和Happy Coding
我正在尝试匹配具有特定id的div块.这是我的正则表达式代码:
<div\s+[^>]*\s*id\s*=\s*["|']content["|']\s*>[^/div]+
Run Code Online (Sandbox Code Playgroud)
我希望正则表达式匹配整个div块.所以我把[^/div] +放在我的正则表达式中,我假设它会匹配剩余的字符,直到它到达结尾但是它不能匹配直到结束,因为[^]表达式认为我不想要匹配任何</ | d | 我| v | >.我想要的是将整个事情视为一个整体.放置一个[^()]也没有帮助.
所以请告诉我如何编码这个问题
<div id="content">
<noscript></noscript>
<a href="blabla.com">
<h1>
<a href="blablac.com">Blablabla</a>
</h1>
</div>
Run Code Online (Sandbox Code Playgroud)