Кодирование парамов url, которые генерируются динамически для использования в CURL

Я пишу робота и получаю все URL на веб-странице. URL-адреса, как это:

http://www.example.com/result/رایانه

Теперь, когда я пытаюсь получить содержимое этого url-адреса CURL, дайте мне эту ошибку:

400 Bad request

Я знаю эту причину, потому что для "رایانه"в url и должны кодировать его.
Но этот URL динамически, и мне нужно решение для кодирования просто params в URL.
Быть такой:

"http://www.example.com/result/" . urlencode("رایانه")

Или другой пример:

Возможно, у меня есть этот URL:

http://www.example.com/result/سوتی/?foo=علی&bar=حسن

Если я использую urlencode()вернуть это:

http%3A%2F%2Fwww.example.com%2Fresult%2F%D8%B3%D9%88%D8%AA%DB%8C%2F%3Ffoo%3D%D8%B9%D9%84%DB%8C%26bar%3D%D8%AD%D8%B3%D9%86

Но так должны закодировать это слова:سوتی,علی,حسن.
и это правильно закодировано:

http://www.example.com/result/%D8%B3%D9%88%D8%AA%DB%8C/?foo=%D8%B9%D9%84%DB%8C&bar=%D8%AD%D8%B3%D9%86

Мне нужно это для использования в CURL.
Как я могу это сделать?

РЕДАКТИРОВАТЬ:

Я нашел этот код:

echo implode("/", array_map("urlencode", explode("/", $string)));

возвращаться:

http%3A//www.example.com/result/%D8%B3%D9%88%D8%AA%DB%8C/%3Ffoo%3D%D8%B9%D9%84%DB%8C%26bar%3D%D8%AD%D8%B3%D9%86

Но результат не совсем верен.

1 ответ

  1. Я нашел решение:

    $string = 'http://www.example.com/result/سوتی/?foo=علی&bar=حسن';
    $string = urlencode($string);
    echo str_replace(array('%3A', '%2F', '%3F', '%3D', '%26'), array(':', '/', '?', '=', '&'), $string);
    

    Выход:

    http://www.example.com/result/%D8%B3%D9%88%D8%AA%DB%8C/?foo=%D8%B9%D9%84%DB%8C&bar=%D8%AD%D8%B3%D9%86
    

    Он работает с любым URL и принимает для использования в CURL.