| 
	| 
	
	| 
		
	| 
			
			 
			
				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? 
Если этот вопрос неадкватный, то не знаю что и сказать, попробуйте повторить ситуацию, исходные данные я довольно внятные предоставил, кода там на пять минут копировать... "базу начальных знаний".. ну да, вчера увидел браузер и решил авторизацию аяксовую написать.. перед тем как задавать вопрос, я поискал в нете ответ на него, не нашел - спросил тут. |  |  |  |