11.10.2010, 20:56
|
Новичок на форуме
|
|
Регистрация: 11.10.2010
Сообщений: 7
|
|
Не та кодировка при изменении элементов 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 была?
|
|
11.10.2010, 21:54
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
в AJAX по-умолчанию кодировка UTF-8
windows-1251е - архаизм, но если уж используете прочтите статью.
Последний раз редактировалось monolithed, 11.10.2010 в 22:00.
|
|
11.10.2010, 23:39
|
Новичок на форуме
|
|
Регистрация: 11.10.2010
Сообщений: 7
|
|
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?
|
|
12.10.2010, 14:55
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
Если не дойдет с первого раза, прочитать 51 раз аки мантру: javascript - utf-8
ps: кодировку html файла проверьте, в какой отдается с сервера, в какой пишите. Других вариантов вроде и нет.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Последний раз редактировалось Gozar, 12.10.2010 в 15:13.
|
|
12.10.2010, 21:59
|
Новичок на форуме
|
|
Регистрация: 11.10.2010
Сообщений: 7
|
|
А вот не получается 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 можно не повторять, я понял/знаю.
Последний раз редактировалось ShootNik, 12.10.2010 в 22:01.
|
|
13.10.2010, 09:45
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
Сообщение от ShootNik
|
1) check_reg.js пересохранить все-таки в utf-8. Работает, но почему не пойму
|
потому что
Сообщение от Gozar
|
javascript - utf-8
|
зы: т.к. до вас туго доходит, а мне лень объяснять все, но меня радует что вы хотите разобраться как это работает, то я вам подскажу, а остальное дойдет со временем.
Сообщение от ShootNik
|
пхп скрипт отдает браузеру строчку
echo '<script type="text/javascript" src="check_reg.js"></script>...
|
мысль не верная, правильно так -
пхп скрипт отдает браузеру строчку
<script type="text/javascript" src="check_reg.js"></script>
, соответственно браузер запрашивает файл check_reg.js, который в вашем случае в utf-8, в результате всё ок.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
|
|
13.10.2010, 11:18
|
Новичок на форуме
|
|
Регистрация: 11.10.2010
Сообщений: 7
|
|
Цитата:
|
т.к. до вас туго доходит
|
эээх, тупить так тупить - почему тогда если написать тоже самое сразу в index.html
<script type="text/javascript" src="check_reg.js"></script>
причем кодировка check_reg.js 1251, то все подключается и читается по русски? Я считал, что браузер должен одинаково обрабатывать разметку как написанную заранее, так и подгруженную позже, ан нет.
|
|
13.10.2010, 11:31
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
ShootNik,
вы какой-то бред говорите. Браузер понятия не имеет, заранее вы подготовили вёрстку или через echo вывели. Он получает сформированный html-документ. Он даже не знает, что на сервере PHP работает.
|
|
13.10.2010, 11:48
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
если база 0, то никакими советами не поможешь
ShootNik, прочтите что такое кодировка, что такое браузер, как он формирует документы и т.д. в общем базу начальных знаний вам нужно.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
|
|
13.10.2010, 13:21
|
Новичок на форуме
|
|
Регистрация: 11.10.2010
Сообщений: 7
|
|
Сообщение от Kolyaj
|
Браузер понятия не имеет, заранее вы подготовили вёрстку или через echo вывели. Он получает сформированный html-документ. Он даже не знает, что на сервере PHP работает.
|
Согласен. Так почему же в случае заранее подготовленной верстки, он подгружает скрипт в win-1251, а в случае
$.post('show_ads.php?do=add', function(data) { $('#geoip_ads').html(data);})
где data это та же самая строчка
<script type="text/javascript" src="check_reg.js"></script>
скрипт подгружается в utf-8?
Если этот вопрос неадкватный, то не знаю что и сказать, попробуйте повторить ситуацию, исходные данные я довольно внятные предоставил, кода там на пять минут копировать... "базу начальных знаний".. ну да, вчера увидел браузер и решил авторизацию аяксовую написать.. перед тем как задавать вопрос, я поискал в нете ответ на него, не нашел - спросил тут.
|
|
|
|