Кирилица в Get запросе curl

404
05 августа 2017, 05:20

У меня есть скрипт который отлично работает с базой, но проблема возникает когда пытаюсь отправить запрос содержащий кирилицу через php, когда как запрос через открытие url адреса в браузера работает отлично.

setlocale(LC_CTYPE, array('ru_RU.utf8', 'ru_UA.utf8')); 
setlocale(LC_ALL, array('ru_RU.utf8', 'ru_UA.utf8')); 
function call($method, $url, $data = false) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
    curl_setopt($ch, CURLOPT_URL, $url);
    if ($data) {
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        $headers = array();
        $headers[] = 'Content-Type: application/json';
        $headers[] = 'Content-Length: ' . strlen($data);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    return curl_exec($ch);
}
$query  .= $GLOBALS['api']."/tables/?transform=1&filter[]=Name,eq,".$rus_name;
$decode = json_decode(call('GET', $query), true);

Если делаю echo $query и просто вызываю этот запрос в браузере все работает, если же в запросе есть кирилица и делаю запрос через call function то ничего не возвращается

$query = iconv('windows-1251', 'utf-8', 'русский текст');
и $query = urlencode($url); НЕ помогли...

Пожалуйста помогите, пол дня провозился

Answer 1

urlencode необходимо использовать только для части URL, то есть, если применить urlencode целиком к адресу, будет закодировано, все, например:

 echo urlencode("http://exmaple.com?et=ЗНАЧЕНИЕ");
 // вывод - http%3A%2F%2Fexmaple.com%3Fet%3D%D0%97%D0%9D%D0%90%D0%A7%D0%95%D0%9D%D0%98%D0%95

а правильно будет:

 echo "http://exmaple.com?et=".urlencode("ЗНАЧЕНИЕ");
 // вывод - http://exmaple.com?et=%D0%97%D0%9D%D0%90%D0%A7%D0%95%D0%9D%D0%98%D0%95

То есть в вашем случае:

 $query .= $GLOBALS['api'] . "/tables/?transform=1&filter[]=Name,eq," . urlencode($rus_name);
READ ALSO
Google Shopping API parse (PHP)

Google Shopping API parse (PHP)

Доброго времени суток

257
Бесконечное выполнение PHP в Bash

Бесконечное выполнение PHP в Bash

Есть скрипт на Bash, запускающий PHP скрипт:

401
Bitrix Значения свойств в отдельной таблице инфоблока

Bitrix Значения свойств в отдельной таблице инфоблока

Всем привет, имеется bitrix, значения свойств инфоблока хранятся в отдельной таблицеА как посмотреть где эта отдельная таблица ??? Пару часов...

326
Кэширование HTML и как его отключить

Кэширование HTML и как его отключить

ПриветУ меня есть веб-приложение, состоящее из html-разметки и встроенного <?php ?> кода

391