|
|
|
| Есть текстарея в которую пользователь вписывает стих, при нажатии на кнопку "проверить" в другом столбце появляется этот стих в котором все гласные выделены красным цветом и напротив каждой строчки написано цифрой кол-во гласных в строчке.. осуществляется это следующим образом.
<? if (isset($tex))
{$tex = explode("\n", $tex);
foreach($tex as $cur_string)
{
if(!empty($cur_string))
{
if (preg_match_all('/([аеёиоуыэюя])/si', $cur_string, $result, PREG_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.
заранее огромное спасибо!!! Надеюсь, что мне удалось понятно обьяснить суть проблеммы | |
|
|
|
|
|
|
|
для: UnlikeAO
(15.09.2008 в 06:02)
| | асинхронные запросы передают/принимают данные в кодировке utf8 | |
|
|
|
|
|
|
|
для: Trianon
(15.09.2008 в 09:43)
| | А по другому ника что ли?? А как мне тогда перекодировать? | |
|
|
|
|
|
|
|
для: UnlikeAO
(15.09.2008 в 16:24)
| | >А по другому ника что ли??
Сами-то поняли, что спросили?
А как мне тогда перекодировать?
iconv() | |
|
|
|
|
|
|
|
для: 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:42)
| | про iconv пишет тоже самое | |
|
|
|
|
|
|
|
для: UnlikeAO
(15.09.2008 в 16:46)
| | и Вы не знаете, что это значит?
Тогда Вам явно рано браться за AJAX. | |
|
|
|
|
|
|
|
для: Trianon
(15.09.2008 в 17:29)
| | спасибо за исчерпывающий ответ, вместо всех этих фраз можно было просто ответить "Мне впадлу тебе отвечать" либо вообще ничего не писать. Рано или не рано, это мне судить, к тому же кодировка на русский язык не является такой ключивой функцией... Есть может кто нибудь кто сможет дать мне нормальный ответ на этот вопрос? что обозначает ошибка которую мне выдало, я знаю, это говорит мне о двух вещах, 1- что на моем компе не установлена нужная библеотека, а 2- это то, что даже если я установлю её на локалке, то совсем не обязательно, что она установленна на сервере... и это проверено.. | |
|
|
|
|
|
|
|
для: UnlikeAO
(15.09.2008 в 19:37)
| | >спасибо за исчерпывающий ответ.
не за что.
>вместо всех этих фраз можно было просто ответить
вопроса не было.
>Рано или не рано, это мне судить,
Ошибаетесь.
Опять же если Вы знали, что эта диагностика означает, чего Вы ждали в ответ?
На сервере iconv() обычно поддерживается. На подавляющем большинстве хостингов.
есть еще похожий инструмент mb_convert_encoding() , но он более тяжелый, и устанавливается реже, насколько я могу судить.
Насколько я заметил, на локалке php у Вас под Windows , и если функции нет - значит у Вас просто старый php.
В php 5 она входит прям в ядро. | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: Петр
(15.09.2008 в 21:30)
| | >можно росто сделать дополнительный sql-запрос (SET NAMES 'utf8') перед INSERT
это делает запрос не SET NAMES а SET CHARACTER SET.
Неаутентичным запросом SET NAMES (на живой заполненной данными базе) Вы эти данные угробите. | |
|
|
|