我有一個腳本,通過cURL提交一個POST請求到外部網站,並期望收到一個文件作爲迴應。但是,如果出現錯誤,該網站將返回一個HTML錯誤頁面,而不是預期的文件。如何使用正則表達式測試,如果一個字符串包含一個HTML頁
我有響應存儲在一個字符串,我想檢查如果字符串包含HTML頁面,如果沒有,我們可以假設字符串包含請求的文件數據。
我無法創建正則表達式來測試字符串是否爲HTML頁面。我想測試下:
數據具有先導開口HTML標籤:
<\s*html.*>
數據具有後續打開身體標記:
<\s*body.*>
的數據有後續關閉機構標記:
<\/\s*body.*>
該數據有一個隨後的結束HTML標記:
<\/\s*html.*>
我試過如下:
function isHTMLPage($data) {
$html_file_regex = '/<\s*html.*>.*<\s*body.*>.*<\/\s*body.*>.*.<\/\s*html.*>/';
return preg_match($html_file_regex, strtolower($data)) === 1;
}
函數返回false(不匹配)在下面的測試數據:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test Page</title>
</head>
<body>
<div>test Content</div>
</body>
</html>
什麼是錯的我正則表達式?
/<\s*html.*>.*<\s*body.*>.*<\/\s*body.*>.*.<\/\s*html.*>/
這可能比您想象的要簡單; Content-Type標題返回什麼(在不同的結果之間)?例如如果服務通常返回json,你應該看到'application/json',但錯誤頁面會切換到'text/html'。 –
我不確定你的目的,但不解析HTML使用HTML DOM解析器 –
它是標準的HTML取回失敗的HTML頁面,例如,一個404頁面。這仍然是一個有效的HTML頁面,但它只會說一些版本的「文件未找到」。您應該檢查http狀態代碼。 –