Не та кодировка при изменении элементов DOM, загружаемых через ajax
Проблема подробнее:
Файл index.html: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" > <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script type="text/javascript" src="geoip.js"></script> </head> <body> <div id="add_ads"><a href='javascript:void(null)'>Добавить объявление</a></div> <div id="geoip_ads">text</div> </body> </html> В файле geoip.js есть функция: $('#add_ads').click(function() { $.post('show_ads.php?add=add', function(data) { $('#geoip_ads').html(data);}) В файле show_ads.php: case 'add': echo ' <script type="text/javascript" src="check_reg.js"></script> <form id="regform" target="_self" style="margin: 0px;" name="regform" method="post" action="show_ads.php"> <div id="authtitle">Регистрация</div> <table cellpadding="2" cellspacing="2" align="center" id="authtable"> <tr> <td id="regtd">Логин:</td> <td id=""><input name="login" type="text" id="logininput" onchange="checkLogin()" autocomplete="off" /><div id="logincheck">  <br> </div></td> </tr> ... </form>'; break; В скрипте check_reg.js функция: function checkLogin(){ var userlogin = $("#logininput").attr('value'); var reg= /^[a-zA-Z0-9_]{2,15}$/ ; if (reg.test(userlogin)) { $("#logincheck").load("/geoip/show_ads.php", {add: "checklogin", data:userlogin}); } else { if (userlogin.length < 2){ $("#logincheck").html('<span style="color:red">Минимальная длина = 2</span>'); } ....еще условия... } } Собственно, проблема - когда я ввожу в поле логин больше двух символов и он проверяется на сервере, ответ приходит в cp1251 и отображается нормально, а когда меньше двух символов, проверка проходит в ява-скрипте и $("#logincheck").html('<span style="color:red">Минимальная длина = 2</span>');почему то получается в utf-8 кракозябрами. Если эту форму не подгружать через ajax, то работает в любом случае. Помогите, как сделать что бы всегда cp1251 была? |
в AJAX по-умолчанию кодировка UTF-8
windows-1251е - архаизм, но если уж используете прочтите статью. |
AJAX нормально все отдает, в той кодировке, которая и ожидается, если пишу
header('Content-type: text/html; charset=windows-1251');контент отдается в 1251, если header('Content-type: text/html; charset=utf-8');то utf-8. А с клиента на сервер, я не передаю ничего в кириллице. Что мне непонятно, почему $("#logincheck").html('<span style="color:red">Минимальная длина = 2</span>');где никакого аякса нет (единственное, применяется он к элементу, загруженному через аякс), оказывается в кодировке utf-8? |
Если не дойдет с первого раза, прочитать 51 раз аки мантру: javascript - utf-8
ps: кодировку html файла проверьте, в какой отдается с сервера, в какой пишите. Других вариантов вроде и нет. |
А вот не получается utf8 в данном случае, сайт не мой.
Вообщем нашел 2,5 решения: 1) check_reg.js пересохранить все-таки в utf-8. Работает, но почему не пойму, пхп скрипт отдает браузеру строчку echo '<script type="text/javascript" src="check_reg.js"></script>...и браузер (4 разных пробовал) почему-то загружает этот скрипт всегда в utf-8, хотя то что идет следом за ним <div id="authtitle">Регистрация</div> отображется в той кодировке что нужно (win-1251). 2) вместо echo '<script type="text/javascript" src="check_reg.js"></script>'вывести сразу его содержимое echo ' <script type="text/javascript"> function checkLogin(){ var userlogin = $("#logininput").attr("value"); var reg= /^[a-zA-Z0-9_]{2,15}$/ ; if (reg.test(userlogin)) { $("#logincheck").load("/geoip/show_ads.php", {add: "checklogin", data:userlogin}); } else { if (userlogin.length < 2){ $("#logincheck").html("<span style=\"color:red\">Минимальная длина = 2</span>"); } else { if (userlogin.length > 15){ $("#logincheck").html("<span style=\"color:red\">Максимальная длина = 15</span>"); } else { $("#logincheck").html("<span style=\"color:red\">Только латинские буквы и цифры</span>"); } } } } </script>';Работает тоже. 2,5) Вывести сразу, но что бы не тянуть в пхп скрип и не долбаться с кавычками: echo '<script type="text/javascript">'; echo file_get_contents('check_reg.js'); echo '</script>';На этом варианте и остановился. Если кто знает, почему echo '<script type="text/javascript" src="check_reg.js"></script>подключается браузером в утф, объясните, пожалуйста. пс: Фразы про то что js ajax в utf-8 можно не повторять, я понял/знаю. |
Цитата:
Цитата:
Цитата:
пхп скрипт отдает браузеру строчку <script type="text/javascript" src="check_reg.js"></script> , соответственно браузер запрашивает файл check_reg.js, который в вашем случае в utf-8, в результате всё ок. |
Цитата:
<script type="text/javascript" src="check_reg.js"></script>причем кодировка check_reg.js 1251, то все подключается и читается по русски? Я считал, что браузер должен одинаково обрабатывать разметку как написанную заранее, так и подгруженную позже, ан нет. |
ShootNik,
вы какой-то бред говорите. Браузер понятия не имеет, заранее вы подготовили вёрстку или через echo вывели. Он получает сформированный html-документ. Он даже не знает, что на сервере PHP работает. |
если база 0, то никакими советами не поможешь :nono:
ShootNik, прочтите что такое кодировка, что такое браузер, как он формирует документы и т.д. в общем базу начальных знаний вам нужно. |
Цитата:
$.post('show_ads.php?do=add', function(data) { $('#geoip_ads').html(data);})где data это та же самая строчка <script type="text/javascript" src="check_reg.js"></script>скрипт подгружается в utf-8? Если этот вопрос неадкватный, то не знаю что и сказать, попробуйте повторить ситуацию, исходные данные я довольно внятные предоставил, кода там на пять минут копировать... "базу начальных знаний".. ну да, вчера увидел браузер и решил авторизацию аяксовую написать.. перед тем как задавать вопрос, я поискал в нете ответ на него, не нашел - спросил тут. |
Цитата:
|
Вот:
http://ecoway-ua.com/test/1.html http://ecoway-ua.com/test/2.html http://ecoway-ua.com/test/3.html первая - сразу в html подключается скрипт, вторая - ответ от сервера, и третья - на сервер читается содержимое check_reg.js и выводится echo'м. скрипт check_reg.js один и тот же в кодировке win-1251. Во втором случае иероглифы. |
Цитата:
|
2. варианта.
мозет бить патамусьта ваша файла прилетай в: Content-Type text/html; charset=windows-1251, а сама в utf-8. А насяльника? |
Вложений: 1
Цитата:
Цитата:
Цитата:
Вообщем чем дальше, тем больше у меня возникает ачучение, что оправдываюсь перед "гуру форума". Не буду дальше спорить, смысла в этом никакого - случай достаточно специфический, может и не стоило с этим заморачиваться, но когда на 80% готово, допилить оставшиеся глюки есть делом принципа. Во вложении тот тест что двумя постами выше. |
ставите firebug, тыкаете во вкладку сеть и смотрите отправляемые и получаемые заголовки. Выписываете на бумажку все ваши случаи с указанием кодировок файлов(всех файлов включая html, php, js) и заголовков. Ответ будет получен вами.
Нечего мне добавить больше, мой подаван. |
check_reg.js - у этого файла кодировка 1251, перекодируйте в UTF-8, может что получится
|
Часовой пояс GMT +3, время: 00:45. |