欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

php curl illegal

李明濤1年前8瀏覽0評論

最近使用 PHP 的 curl 函數遇到了一個問題:Illegal character found in URL 。這個錯誤讓我對我的代碼產生了疑問,一開始我以為是我自己犯了錯誤,但是后來我發現這個問題與我沒有任何關系,因為這個問題出在了我要訪問的網站的 URL 上。

這個問題出現的原因是 URL 中有非法字符,而 curl 函數對于這些非法字符是不允許的。下面是一些常見的非法字符:

$illegalChars = array(
"<", ">", "#", "%", "{", "}", "|", "\\", "^", "~", "[", "]", "`", ";", "/", "?", ":", "@", "=", "&"
);

如果你要使用這些非法字符來作為參數或者值,那么就要對這些字符進行 URL 編碼了。URL 編碼是將非法字符轉化為 % 加上其 ASCII 碼值的十六進制數的形式,比如空格轉化為 %20。PHP 中有一個函數 urlencode 可以方便地實現 URL 編碼:

$url = "http://example.com/api/search?keyword=".urlencode("something to search");
curl_setopt($ch, CURLOPT_URL, $url);

不幸的是,有些時候即使你已經使用了 urlencode 函數對 URL 進行了編碼,仍然會出現以上的錯誤。因為有些網站可能沒有按照 URL 編碼的規范來實現,或者校驗方式不是標準的 RFC 3986。

比如以下這個例子:

$url = "http://example.com/api/search?keyword=" . rawurlencode("something to search?keyword=apple");
curl_setopt($ch, CURLOPT_URL, $url);

在這種情況下,即使使用了 rawurlencode 函數進行編碼,仍然會收到 illegal character 的錯誤。這是因為在 URL 中?后面的字符應該被編碼為 %3F,而不是直接保留為 ?。

解決這個問題的辦法也很簡單,我們可以手動將 ? 轉化為 %3F,如下所示:

$url = "http://example.com/api/search?keyword=" . str_replace("?", "%3F", rawurlencode("something to search?keyword=apple"));
curl_setopt($ch, CURLOPT_URL, $url);

在實際操作中,我們可以通過輸入 URL 到瀏覽器地址欄里這一步來驗證 URL 是否合法,如果瀏覽器能夠成功打開,那么這個 URL 就是合法的。

總之,遇到 PHP curl 報錯 Illegal character found in URL 時,我們需要檢查 URL 是否合法、是否按規范編碼。如果沒有按規范,請使用 urlencode 函數對 URL 進行編碼并嘗試解決問題。如果問題依舊存在,可以手動處理一些字符,或者聯系對方維護網站的人員進行處理。