我使用cURL向服务器发送请求,这是链接:Server Side script for cURL request 我用file_get_contents('php:// input')读取已发送的数据; 但我的xml周围有一些讨厌的数据。所以我认为使用preg_match只选择xml。 像这样:
$arq = file_get_contents('php://input');
$wanted="/\<request\>(.*?)\<\/request\>/i";
preg_match($wanted, $arq, $result);
echo $result;
这是$ arq:
的内容------------------------------9e2a86ef9445
Content-Disposition: form-data; name="data"
<request>
<session>
<user>exampleuser</user>
<pass>examplepass</pass>
</session>
</request>
------------------------------9e2a86ef9445--
我怎样才能阅读之间的所有内容 因为它内部的内容不是静态的,它是动态的,并且在分离的请求中可能是不同的。
非常感谢你。
答案 0 :(得分:1)
你应该查看php的DOMDocument和DOMXpath ..你会拥抱自己:)它非常强大。不需要正则表达式。我亲自做了很多网络搜索。
答案 1 :(得分:1)
使用DOMDocument
Class不是这么简单吗?
<?php
$html='some nasty data
<request>
<session>
<user>exampleuser</user>
<pass>examplepass</pass>
</session>
</request>
and samo nasty data here';
$dom = new DOMDocument;
@$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('session') as $tag) {
echo $tag->nodeValue."<br>";
}
输出:
exampleuser
examplepass
答案 2 :(得分:1)
您可以使用由我修改的Gumbo
最初编写的此正则表达式来满足您的需求。
<?php
$html='------------------------------9e2a86ef9445
Content-Disposition: form-data; name="data"
<request>
<session>
<user>exampleuser</user>
<pass>examplepass</pass>
</session>
</request>
------------------------------9e2a86ef9445--';
$tagname = 'request';
$pattern = '/<'.preg_quote($tagname, '/').'(?:[^"\'>]*|"[^"]*"|\'[^\']*\')*>(.*?)<\/'.preg_quote($tagname, '/').'>/s';
preg_match_all($pattern, $html, $matches);
echo $thefilteredXML = $matches[0][0];
OUTPUT(就像在浏览器的视图源中一样):
<request>
<session>
<user>exampleuser</user>
<pass>examplepass</pass>
</session>
</request>