Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с кодировкой при переходе на AJAX метод, хотя PHP не изменялся...
 
 автор: UnlikeAO   (15.09.2008 в 06:02)   письмо автору
 
 

Есть текстарея в которую пользователь вписывает стих, при нажатии на кнопку "проверить" в другом столбце появляется этот стих в котором все гласные выделены красным цветом и напротив каждой строчки написано цифрой кол-во гласных в строчке.. осуществляется это следующим образом.

 <? if (isset($tex)) 
      {
$tex explode("\n"$tex);
       foreach(
$tex as $cur_string)  

    if(!empty(
$cur_string)) 
    { 
        if (
preg_match_all('/([аеёиоуыэюя])/si'$cur_string$resultPREG_PATTERN_ORDER)) { 
            
$kolichestvo_glasnyh count($result[0]); // Кол-во гласных в строке
             
            /* подсветка гласных в тексте  */ 
            
$result preg_replace('#([аеёиоуыэюя])#i''<i class=glasnie>\\1</i>'$cur_string);
      
             
            echo 
"<b class=Kolvo>"$kolichestvo_glasnyh."</b><i class=texthokku>".$result."</i> <br>";
             } else { 
            echo 
$cur_string."<br>";
              } 
    } else { 
        echo 
"<br>";
           } 


      }  
?>

Все хорошо работает в обычной php странице, при нажатии на кнопку "проверить" страница перезагружается, образуется новый столбик, все по задумке все красиво...
Теперь я хочу чтоб это все происходило без перезагрузки страницы, у меня есть страница с формой, я пишу в нее стих, нажимаю проверить (в данном случае скрипт описаный выше вынесен в отдельный фаил) в итоге у меня появляется мой "обработаный текст" который написан одной строчкой, ни одна гласная не распознается, кроме "и", скрипт заменяет эту букву на два ромбика с вопросами, один красный другой черный. "И" большую скрипт тоже не распознает.. перенос строки тоже не осуществляется... сколько не рылся, так и не понял где происходит глюк...
вот куски сценариев

index.php

...
<script type="text/javascript" >
 var XMLHttpRequestObject = false; 

      if (window.XMLHttpRequest) {
        XMLHttpRequestObject = new XMLHttpRequest();
      } else if (window.ActiveXObject) {
        XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
      }

function getData( htitle, htext, divID) 
      { 
        if(XMLHttpRequestObject) {
          var obj = document.getElementById(divID); 
          obj.innerHTML = "Loading...";
          dataSource="data.php?HokkuTitle="+htitle+"&tex="+htext;
          XMLHttpRequestObject.open("POST", dataSource); 

          XMLHttpRequestObject.onreadystatechange = function() 
          { 
          
            if (XMLHttpRequestObject.readyState == 4 && 
              XMLHttpRequestObject.status == 200) { 
                obj.innerHTML = XMLHttpRequestObject.responseText; 
            } 
          } 

          XMLHttpRequestObject.send(null); 
        }
      }
</script>
...
<input type="button"  value="Проверить" class="HokkuButton" 
      onclick="getData(document.hokku.HokkuTitle.value, document.hokku.tex.value, 'item')" />


data.php
(в этом файле написан скрипт приведенный вверху так как он есть, кроме него ничего не написано.)
Не понятно на каком этапе передачи происходит ошибка....
getData(document.hokku.HokkuTitle.value, document.hokku.tex.value, 'item')
...
dataSource="data.php?HokkuTitle="+htitle+"&tex="+htext;
XMLHttpRequestObject.open("POST", dataSource);

...
obj.innerHTML = XMLHttpRequestObject.responseText;
...
или где то в самом php.
заранее огромное спасибо!!! Надеюсь, что мне удалось понятно обьяснить суть проблеммы

  Ответить  
 
 автор: Trianon   (15.09.2008 в 09:43)   письмо автору
 
   для: UnlikeAO   (15.09.2008 в 06:02)
 

асинхронные запросы передают/принимают данные в кодировке utf8

  Ответить  
 
 автор: UnlikeAO   (15.09.2008 в 16:24)   письмо автору
 
   для: Trianon   (15.09.2008 в 09:43)
 

А по другому ника что ли?? А как мне тогда перекодировать?

  Ответить  
 
 автор: Trianon   (15.09.2008 в 16:32)   письмо автору
 
   для: UnlikeAO   (15.09.2008 в 16:24)
 

>А по другому ника что ли??
Сами-то поняли, что спросили?

А как мне тогда перекодировать?

iconv()

  Ответить  
 
 автор: UnlikeAO   (15.09.2008 в 16:42)   письмо автору
 
   для: Trianon   (15.09.2008 в 16:32)
 

пишет мне
fatal error: Call to undefined function: iconv_set_encoding() in z:\home\myajax.ru\www\data.php on line 2

  Ответить  
 
 автор: UnlikeAO   (15.09.2008 в 16:46)   письмо автору
 
   для: UnlikeAO   (15.09.2008 в 16:42)
 

про iconv пишет тоже самое

  Ответить  
 
 автор: Trianon   (15.09.2008 в 17:29)   письмо автору
 
   для: UnlikeAO   (15.09.2008 в 16:46)
 

и Вы не знаете, что это значит?
Тогда Вам явно рано браться за AJAX.

  Ответить  
 
 автор: UnlikeAO   (15.09.2008 в 19:37)   письмо автору
 
   для: Trianon   (15.09.2008 в 17:29)
 

спасибо за исчерпывающий ответ, вместо всех этих фраз можно было просто ответить "Мне впадлу тебе отвечать" либо вообще ничего не писать. Рано или не рано, это мне судить, к тому же кодировка на русский язык не является такой ключивой функцией... Есть может кто нибудь кто сможет дать мне нормальный ответ на этот вопрос? что обозначает ошибка которую мне выдало, я знаю, это говорит мне о двух вещах, 1- что на моем компе не установлена нужная библеотека, а 2- это то, что даже если я установлю её на локалке, то совсем не обязательно, что она установленна на сервере... и это проверено..

  Ответить  
 
 автор: Trianon   (15.09.2008 в 20:02)   письмо автору
 
   для: UnlikeAO   (15.09.2008 в 19:37)
 

>спасибо за исчерпывающий ответ.
не за что.

>вместо всех этих фраз можно было просто ответить
вопроса не было.

>Рано или не рано, это мне судить,
Ошибаетесь.

Опять же если Вы знали, что эта диагностика означает, чего Вы ждали в ответ?

На сервере iconv() обычно поддерживается. На подавляющем большинстве хостингов.
есть еще похожий инструмент mb_convert_encoding() , но он более тяжелый, и устанавливается реже, насколько я могу судить.

Насколько я заметил, на локалке php у Вас под Windows , и если функции нет - значит у Вас просто старый php.
В php 5 она входит прям в ядро.

  Ответить  
 
 автор: Петр   (15.09.2008 в 21:30)   письмо автору
 
   для: UnlikeAO   (15.09.2008 в 19:37)
 

Дело в том, что AJAX выдает результат работы скрипта в UTF кодировке. Поэтому есть два выхода:

1 перевести весь сайт в кодировку UTF-8 (указать charset=UTF-8 в шапке стрницы или в .htacces добавить AddDefaultCharset UTF-8) размер страницы немного увеличится (размер = верстка+латиница+кириллиц*2)

2 менять кодировку перед вводом и выводом, т.е. если ajax-скрипт должен добвить введенные значения в БД, можно росто сделать дополнительный sql-запрос (SET NAMES 'utf8') перед INSERT
а если этот скрпит должен сначала обработать введенные данные, то нужно предварительно переконвертировать нужные переменные (iconv есть не на каждом хостинге), можно использовать mb_convert_encoding
$_POST['name'] = mb_convert_encoding($_POST['name'], "WINDOWS-1251", "UTF-8");


P.S. лучше использовать способ 2

  Ответить  
 
 автор: Trianon   (15.09.2008 в 21:44)   письмо автору
 
   для: Петр   (15.09.2008 в 21:30)
 

>можно росто сделать дополнительный sql-запрос (SET NAMES 'utf8') перед INSERT
это делает запрос не SET NAMES а SET CHARACTER SET.
Неаутентичным запросом SET NAMES (на живой заполненной данными базе) Вы эти данные угробите.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования