2015-11-28 4 views
1

Когда я хочу распечатать вывод jQuery AJAX, который был получен с сервера. Он не показывает правильную кодировку. То, что я хочу, это получить Š, вместо этого я получаю ?. Все файлы script.js и сервер php proceed.php сохраняются в UTF-8 и устанавливаются в UTF-8. База данных также установлена ​​в UTF-8. Я пробовал большинство вещей. В .js файл для AJAX:Получение неправильного вывода набора символов из AJAX

$.ajaxSetup({ 
    url: "proceed.php", //file to procces data 
    ContentType : 'charset=UTF-8', // tried here 
    global: false, 
    type: "POST", 
    dataType: "html" 
}); 

В .php файл:

mysql_query("SET NAMES utf8"); 
$output = utf8_decode($sql_result); 

Все возможные комбинации.

UPDATE: Я пробовал все предлагаемый метод во всех возможных вариантах и ​​с их помощью, я не получаю никакого ответа от сервера. Единственный раз, когда я получаю, по крайней мере, ответное решение - с настройками, упомянутыми выше - буквально. Установка AJAX dataType: "text/html" ни dataType: "application/html" не помогает.

КОД: PHP

if(!empty($_POST['select_had'])){ 
$zem = $_POST['select_had']; 
$vysledek = mysql_query("SELECT typ_hadanky, jazyk FROM hlavolam RIGHT JOIN hadanka ON hlavolam.id_hlavolamu=hadanka.id_hlavolamu WHERE zeme_puvodu='$zem'"); 
$out = ""; 
while ($zaznam = mysql_fetch_array($vysledek)) { 
    $zaz = $zaznam['jazyk']; 
    $out .= "<option>".$zaz."</option>"; 
} 
$vys = utf8_decode($out); 
echo $vys; 

}

JQuery:

$("#sel_had_zem").change(function(){ 
var select_had = $("#sel_had_zem option:selected").text(); 
console.log(select_had); 
$.ajax({ 
    data:{'select_had':select_had}, 
    success: function(data){ 
     console.log(data); 
     $("#sel_had_jaz option").nextAll().remove(); 
     $("#sel_had_jaz").append(data); 
    }, 
    error: function(){ 
     alert('No server response'); 
    } 
}); 

}); 
+1

Попробуйте 'contentType: 'charset = utf-8'' и do'' dataType application/html'' – Kray

+0

Я мог ошибаться, но считаю, что ваши данные неверны. Должны быть «данные: {« select_had »:« select_had »}», у вас есть только одна цитата вокруг ключа, но нет кавычек вокруг значения? @Croolman – Kray

+0

Это не проблема – Croolman

ответ

1

Вам необходимо установить кодировку в подключение к MySQL, а не в запросе MySQL. Если вы используете MySQLi, вы можете использовать встроенную функцию PHP mysqli_set_charset(). Однако, если вы используете PDO, то вы можете использовать его как это:

new PDO('mysql:host=localhost;dbname=DBNAME;charset=utf8;', USERNAME, PASSWORD); 

Вы можете найти более подробную информацию о mysqli_set_charset() функции здесь: http://www.w3schools.com/php/func_mysqli_set_charset.asp

Примечание: Пожалуйста, также обеспечит вам» ve добавил <meta charset="UTF-8"> в ваш тег HEAD.

+0

Я использую классический старый MySQL, не могу использовать MySQLi-запросы – Croolman

+0

Я считаю, что есть также встроенная функция PHP, называемая 'mysql_set_charset()', которая принимает два аргумента , Это должно сработать. Тем не менее, я не уверен, что эта функция устарела. '$ connection = mysql_connect ('localhost', 'user', 'password');' 'mysql_set_charset ('utf8', $ connection);' –

0

Вы хотите установить выход из PHP-страницы для UTF-8 и правильный MIME-тип:

mysql_query("SET NAMES utf8"); 
header('Content-Type: text/html; charset=utf-8'); 
echo $sql_result; 
exit; 

Это должно решить проблему!

+0

Не работает. Это ведет себя смешно. После перезагрузки страницы автоматически загружается какой-либо системный файл. – Croolman

+0

В php-руководстве используется 'Content-Type: text/html'. Я не знаю, лучше ли это или просто устаревшая версия протокола HTTP? –

+0

Я использовал этот сам с тех пор, как – Croolman

1

Попробуйте изменить следующий ..

dataType: 'html'

в

dataType: 'application/html'

держать

contentType: 'charset=utf8'

и добавить <?php header('Content-Type: application/html; charset=utf8'); ?> в начало страницы.

Для сообщения об ошибке введите error_reporting(E_ALL); в верхней части страницы.Если возникнут какие-либо ошибки, отправьте код для этой строки и опубликуйте сообщение об ошибке в сообщении OP.

Для вашей ошибки

Resource interpreted as Document but transferred with MIME type application/html

В заголовке вашего запроса, вы отправили Content-Type: HTML, который означает, что вы хотели бы интерпретировать ответ, как HTML. Теперь, если даже сервер отправляет вам файлы PDF, ваш браузер пытается понять его как HTML. Это проблема.

Так что вам нужна информация о том, что именно вы пытаетесь отправить, и что такое конечный результат с этими данными?

+0

Не помогает. Я вообще не получаю ответа. – Croolman

+0

Вы указываете свою кодировку на своей фактической странице html/php, например ' '? вы можете попробовать 'text/html' или 'application/html' @Croolman – Kray

+0

У меня есть эти заголовки в исходном файле php. И я также попытался изменить их, как было предложено. Нет эффекта. – Croolman

Смежные вопросы