2010-05-20 2 views
7

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

Для примера. На странице oringal был index.php. charset была явно установлена ​​в utf8 и находится в <head>. Затем я использовал PHP для запросов к базе данных

Heres оригинальный 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()» функция вызывает яваскрипт страницы, которая использует 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); 
      } 
}); 

Что я делаю неправильно?

+0

я думаю, что это проблема ** BOM ** Byte Order Mark http://www.google.it/search?hl=it&q= + Byte + Order + Mark + (BOM) & aq = f & aqi = & aql = & oq = & gs_rfai = –

ответ

6

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

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

+0

Хорошо, я изменил все свои файлы, включая все входящие из ANSI в UTF-8. Я посмотрел базу данных, но не уверен, что смотрю в нужное место. Столбцы в разделе «COLLATION» «Latin1_swedish_ci» не уверены, что это значит. Как еще я могу проверить, являются ли таблицы/столбцы db utf-8? Кроме того, после того, как я сохранил все файлы в utf-8, теперь я получаю сообщение об ошибке «Не могу отправить ограничитель кеша сеанса, уже отправленные», но я не изменил никакого кода, кроме сохранения файла как utf-8 и все работало до того, как я это сделал ... не уверен, что происходит. Спасибо за вашу помощь. – Ronedog

+0

Как и другие комментарии, это относится к значению порядка байтов. См. Другие ссылки с других плакатов, а также http://forum.mamboserver.com/showthread.php?t=42814 – mdma

+0

Хорошо, я прочитал все эти другие сообщения. В основном они говорят, что есть пробел или новый символ линии перед символом ' '. Я прошел весь код и все входящие и все равно получаю тот же результат. Я даже удалил каждый бит кода с страницы index.php, чтобы он выглядел так: ' '... нет пробелов где-либо до или после ... нет включает в себя другие файлы, которые могут повлиять на него. Когда я перезагружаю страницу, я получаю такое же сообщение об ошибке. ОДНАКО, я решил переустановить страницу index.php как ANSI, и ошибка ушла, но кодировка не была хорошей ??? – Ronedog

1

Вы писали

В "display_html()" функция вызывает Javascript страница, которая использует Jquery АЯКС вызов для получения HTML- хранящийся внутри страницы PHP

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

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

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

+0

Хорошая вещь, чтобы напомнить о настройке редактора. – Timo

0

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

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

0

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

header('Content-type: text/html; charset=utf-8'); 
Смежные вопросы