2012-09-12 35 views
2

我試圖下載一個網頁,例如:曲下載網頁和號錯誤

http://www.site.com/savings/thispage?OneId=88&SecondId=185

捲曲沒有此頁面上;我懷疑由於&符號。我如何轉義這個&符號以允許下載完成?

錯誤是Unable to resolve host

+0

你是如何開展卷曲?你是使用PHP庫(http://www.php.net/cURL),還是通過'system()'(http://www.php.net/system)或'shell_exec()' (http://www.php.net/shell_exec)? – GargantuChet

回答

2

看看:url_encode();rawurlencode();

返回一個字符串,其中除-_以外的所有非字母數字字符。 已被替換爲百分號(%)後跟兩個十六進制數字 以及編碼爲加號(+)的空格。它的編碼方式與 對來自WWW表單的發佈數據進行編碼的方式相同,這與 application/x-www-form-urlencoded媒體類型的編碼方式相同。這不同於» RFC 3986編碼(請參閱rawurlencode()),由於歷史原因, 空格編碼爲加號(+)。

更新:由於誤差爲Unable to resolve host,請確保您的/etc/resolv.conf文件有0644的權限。這將確保安全性並允許Apache/PHP讀取和解析主機名。

您可以檢查PHP和Apache可以通過調用gethostbyname();

+0

我試過urlencode但它沒有幫助。現在檢出rawurlencode。 –

+0

嘗試rawurlencode。該網址確實被重新編碼;然而,由於「無法解析主機」錯誤,curl仍然失敗。 –

+0

你可以在CLI中ping主機或者在http://php.net/manual/en/function.gethostbyname.php中拋棄你的目標主機,看看它是否可以解決。 –

2

如果你正在做這樣

<?php 

$url = "http://www.site.com/savings/thispage?OneId=88&SecondId=185"; 
$encoded = urlencode($url); 

// use cURL to fetch $encoded 

?> 

然後是你從字面上問卷曲獲取http%3A%2F%2Fwww.site.com%2Fsavings%2Fthispage%3FOneId%3D88%26SecondId%3D185訪問DNS服務。這被視爲主機名,因爲沒有「/」字符來將主機名與請求路徑分開。

你是如何啓動cURL的?您是使用PHP library,還是通過system()shell_exec()之類的東西運行它?您可能需要以不同的方式(或根本不用)進行轉義,具體取決於您如何啓動它。

如果你實際上是在命令行中運行它(而不是從PHP在所有),那麼類似下面應該做很好:

curl 'http://www.site.com/savings/thispage?OneId=88&SecondId=185'