Вообщем-то со стороны сервера пытаюсь переводить текст с Яндекс апи. Столкнулся с проблемой, что в зависимости от текста всплывает 400 ошибка. Например при Mad has всё нормально, а при Mad Has ошибка, при Mad Qwe всё нормально. PHP: <?php $curl = curl_init(); $tr_text = $_GET["tr_text"]; $tr_type = $_GET["tr_type"]; $url = "https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20160622T182932Z.c2bfc0460fb9cc92.a72ddd223b90ec7d579cff18b9d3881ede982356&text=". $tr_text ."&lang=". $tr_type; echo $url; curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); $res = curl_exec($curl); curl_close($curl); print_r($res); $res = json_decode($res); //echo $res->text[0] . "<br>"; //echo $_GET['tr_text']; print_r($res); ?> <form method="GET"> <input style="width: 300px" type="text" name="tr_text" value="<?echo $_GET['tr_text'];?>"> <input style="width: 50px" type="text" name="tr_type" value="<?echo $_GET['tr_type'];?>"> <input type="submit"> </form>
С конкретной задачей не сталкивался, но попробуй полученный переменные перевести в один регистр. И уже их отправлять яшке в нижнем регистре PHP: <?php $str = "У Мэри Был Маленький Ягненок и Она Его Очень ЛЮБИЛА"; $str = mb_strtolower($str); echo $str; // Выведет у мэри был маленький ягненок и она его очень любила ?> --- Добавлено --- А ещё как бы у тебя в url идёт разрыв строки... Когда ты передаёшь предложение вот выведи свой url который ты получаешь в результате. Там у тебя в твоём предложение будут разрывы строк. Поэтому скорее всего и error 404. Потому что url c разрывной строкой идёт. Может там в апи написано что между каждым словом какие нибудь знаки должны стоять ?
@bigB попробуй в $url всё что после знака вопроса, формировать с помощью https://secure.php.net/manual/ru/function.http-build-query.php
Спасибо, помогло. Хотя я не понимаю почему, ведь я выводил через echo запрос, просто копировал его и вставлял и всё было нормально, рылся в заголовках, настройках курла очень долго, а всё оказалось так просто. --- Добавлено --- На всякий оставлю здесь полученный код PHP: <?php include("./engine/mysql.php"); $curl = curl_init(); $data = array('key'=>'trnsl.1.1.20160622T182932Z.c2bfc0460fb9cc92.a72ddd223b90ec7d579cff18b9d3881ede982356', 'text'=>$_GET["tr_text"], 'lang'=>$_GET["tr_type"]); $url = "https://translate.yandex.net/api/v1.5/tr.json/translate?". http_build_query($data) . "\n"; echo $url; curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($curl, CURLOPT_HEADER, TRUE); $res = curl_exec($curl); print("<pre>"); curl_close($curl); //$res = json_decode($res); //echo $res->text[0] . "<br>"; //echo $_GET['tr_text']; print_r($res); print("</pre>"); ?> <form method="GET"> <input style="width: 300px" type="text" name="tr_text" value="<?echo $_GET['tr_text'];?>"> <input style="width: 50px" type="text" name="tr_type" value="<?echo $_GET['tr_type'];?>"> <input type="submit"> </form>
Ну где то может проскакивало, не знаю, я не сталкивался ещё с такой задачей. Но ты попробуй создай url с пробелами и вбей в строку браузера, что в результате будет?
Проблема со стороны сервера была конкретно в определенных символах, M A нормально проходило в любом случае, M H выбивало ошибку.
А почему не использовать готовую библиотеку от самого яндекса? https://github.com/yandex-php/translate-api