Кодировка UTF8 не работает при использовании ajax - PullRequest
8 голосов
/ 21 мая 2010

Я недавно изменил некоторые из своих страниц, чтобы они отображались через ajax, и у меня возникло некоторое недоумение, почему кодировка utf8 теперь отображает знак вопроса внутри поля, тогда как раньше это не было.

Пример для примера. Исходной страницей был index.php. charset был явно установлен в utf8 и находится в <head>. Затем я использовал php для запроса базы данных

Вот оригинальная страница index.php:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en">
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Title here</title>
</head>
<body class='body_bgcolor'  >

<div id="main_container">
    <?php 
        Data displayed via php was simply a select statement that output the HTML.  
    ?>
</div>

Однако, когда я сделал изменение, добавив меню, которое заполняло "main_container" через ajax, вся кодировка utf8 перестала работать. Вот новый код:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <title>Title here</title>
    </head>
    <body class='body_bgcolor'  >
<a href="#" onclick="display_html('about_us');"> About Us </a>

    <div id="main_container"></div>

Функция "display_html ()" вызывает страницу javascript, которая использует вызов jquery ajax для извлечения html, хранящегося на странице php, а затем помещает html в div с идентификатором "main_container". Я устанавливаю кодировку в JQuery, чтобы быть UTF8, как:

$.ajax({
        async: false,
        type: "GET", 
        url: url, 
        contentType: "charset=utf-8", 
        success: function(data)
            { 
                $("#main_container").html(data);
            }
});

Что я делаю не так?

Ответы [ 4 ]

7 голосов
/ 21 мая 2010

Кодировка - это больше, чем указание метатега и типа контента - сами файлы должны действительно быть в указанной вами кодировке, иначе вы получите mojibake .

Убедитесь, что все использует UTF-8, вашу базу данных, соединение с базой данных, столбцы таблицы. Убедитесь, что любые статические файлы, которые вы включаете, также закодированы в UTF-8.

1 голос
/ 21 мая 2010

Вы написали

Вызов функции display_html () страница JavaScript, которая использует JQuery AJAX вызов для получения HTML хранится внутри страницы php

Что вы имеете в виду под "html, хранящимся на странице php"? Если вы хотите загрузить данные и отобразить их как содержащие <div>, загруженные данные должны быть отформатированы соответствующим образом. Я имею в виду, что это должен быть настоящий фрагмент кода HTML. Более того, вместе с «contentType» было бы неплохо указать «dataType» как «html» или «text». Если вы ничего не уточните, последняя версия jQuery будет «разумно пытаться получить результаты, основываясь на типе ответа MIME». Если вы знаете «dataType», было бы лучше указать там. И если вы используете ajax, используйте также «async: true» по умолчанию, а не «false».

Вы также должны проверить, является ли метод jQuery.load (см. http://api.jquery.com/load/) лучшим выбором для вас. Вы можете загрузить с помощью mathod полную HTML-страницу, если требуется, и отобразить только ее часть: $('#main_container').load('ajax/about_us.html #container');

И о кодировке UTF-8 не забудьте сохранить файл в кодировке UTF-8. Используйте соответствующую опцию вашего редактора (в «Блокноте» выберите «Сохранить как», а затем выберите кодировку «UTF-8», а не «ANSI»).

0 голосов
/ 09 апреля 2015

В моем случае ни одно из решений не работало, пока я не разместил

header('Content-type: text/html; charset=utf-8');
0 голосов
/ 20 января 2015

Убедитесь, что все ваши файлы сохранены как UTF-8 (или UTF-8 без спецификации).

Если вы загрузили их по FTP или с помощью веб-инструмента, убедитесь, что они все еще в формате UTF-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...