2014-01-13 61 views
3

我使用捲曲發送請求到服務器,這是鏈接:Server Side script for cURL request 和i相的file_get_contents讀sended數據( 'PHP://輸入'); 但我有一些討厭的數據arround我的XML。所以我想用preg_match來選擇xml。 事情是這樣的:的preg_match HTML代碼<request></request>

$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-- 

我怎麼能 間讀到的一切becouse裏面的內容不是一成不變的,它是DINAMIC,可能是在分離不同要求。

非常感謝。

+0

...,什麼是不工作? –

+0

@NielsKeurentjes我沒有任何輸出,我現在很熟悉preg_match。我不知道所有參數,也無法在網上找到它們。 – mandza

+0

[您是否嘗試閱讀簡單的手冊?](http://nl3.php.net/preg_match) –

回答

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> 
+0

非常感謝您的努力。當我在寫它的時候運行它,它工作的很好,但是在我擁有的令人討厭的數據的地方:--------------------------- --- c2fcc86c240b 內容處理:表單數據; name =「data」 當我運行它時,它不再工作。問題是什麼? – mandza

+1

@mandza,請參閱編輯答案。我的內容與您在問題中發佈的內容相同。它返回相同的輸出。按ctrl + U查看來源以查看標籤。 –

+1

非常感謝你的工作。 – mandza

1

你應該看看php的DOMDocumentDOMXpath ..你會擁抱自己:)這是非常強大的。不需要正則表達式。我個人做了很多網站刮自己。

+0

謝謝你的回答,但是有沒有與我的問題有關的任何例子。根據我想要使用DomDocument的方式,需要花費一些時間。 – mandza

+0

你只處理XML嗎? – codeaddict

+0

只是XML。我用cURL通過POST發送帶有XML的數據,因爲發送的數據非常大,大約100KB – mandza

1

使用DOMDocument這個類是不是很簡單?

<?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>"; 
} 

OUTPUT:

exampleuser 
examplepass 
+0

好像他實際上想要保留xml結構,而不是通過刪除垃圾數據來獲取值。 IMO。 –

+0

@Pjack你有權利。Becouse XML結構 – mandza

+0

@mandza上分離的要求不同,所以你只需要這個' exampleuser examplepass'? –

相關問題