2017-02-06 9 views
0

У меня есть URL-адрес с пробелами, который я хочу правильно кодировать при вызове API (в этом случае заменить '' на '% 20', поэтому символы пробела обрабатываются должным образом.PHP urlencode не работает по назначению

$url = 'https://www.someapi.com?param=this and that'; 

Hoever при использовании UrlEncode ($ URL) функции я получаю это неясное представление URL

"https%3A%2F%2..." 

То, что я в конце концов не может решить.

enter image description here ........

Есть ли функция URL-кодирования в PHP, которая просто заменяет пробелы и кавычки вместо того, чтобы делать резкие изменения во всей строке?

+3

Вы не хотите, чтобы закодировать всю вещь, только: '$ URL = 'https://www.someapi.com?param='.urlencode (' это и это »). Вы не кодируете URL-адрес, который вы кодируете для использования в URL-адресе. – AbraCadaver

ответ

0

Вы можете проанализировать URL-адрес запроса и только кодировать строку запроса «значения».

$url = "https://www.someapi.com?param=this and that"; 
$baseUrl = explode("?",$url)[0]; 
parse_str(parse_url($url,PHP_URL_QUERY),$args); 
foreach ($args as $key=>&$arg){ 
    $arg= urlencode($arg); 
} 
echo $baseUrl."?".http_build_query($args); 

Результат:

https://www.someapi.com?param=this%2Band%2Bthat