2016-04-05 102 views
0

有一些網站正在使用odata協議來訪問api。 要加載用戶與特定的身份ID,例如,我可以用這個網址:用於url請求的帶單引號的PHP字符串

https://domain.com/contacts/?$filter=status_id eq 1 

簡單明瞭。在這種情況下,我只是定義字符串,並得到預期的響應,且捲曲:

$ch = curl_init(); 
$query = 'https://domain.com/contacts/?$filter=status_id eq 1' 
curl_setopt($ch, CURLOPT_URL, $query); 
$response = curl_exec($ch); 

但真正的問題始於此:

https://domain.com/contacts/?$filter=email eq '[email protected]' 

這裏電子郵件與單引號包圍。我已經嘗試過單引號和雙引號字符串轉義:

$query = 'https://domain.com/contacts/?$filter=email eq \'[email protected]\'' 
$query = "https://domain.com/contacts/?\$filter=email eq '[email protected]'" 

這一切都沒有奏效 - 我每次都收到請求錯誤。 但如果我在Ruby中運行這個 - 一切工作,因爲它expecteted:

RestClient.get "https://domain.com/contacts/?$filter=email eq '[email protected]'", [] 

我能做些什麼嗎? PHP的版本是5.3。

+0

你的錯誤是什麼?適用於我,https://eval.in/547892 ..(不是在談論實際的網址)。 – chris85

回答

2
https://domain.com/contacts/?$filter=email eq '[email protected]' 

這不是一個有效的URI。有效的URI編碼形式爲:

https://domain.com/contacts/?%24filter=email%20eq%20'email%40example.com' 

網址有一定特殊字符你不能直接使用,但必須以有效編碼爲%..序列。您可以使用rawurlencode在PHP中執行此操作。您必須編碼項分別:接收服務器

$url = 'https://domain.com/contacts/?' . rawurlencode('$filter') . '=' . rawurlencode("email eq '[email protected]'"); 

是否會接受該URL與否是一個不同的主題,但至少你覆蓋在你的最終基礎。

+0

是的,這個伎倆,非常感謝! – Rasmussen

相關問題