Textarea + Ajax (форматированная передача текста)

monte

Новичок
Textarea + Ajax (форматированная передача текста)

День добрый,

может кто поможет.
Проблемка следующего характера.

Поле textarea автоматически считывается в определённое время. (автообработка)
Текст который получает обработчик не сохраняет форматирование по строчкам.


к примеру пишу

1
2
3

скрипт (save.php) получает и выдаёт

123

если я просто делаю посылку формы, то форматирование передаётся нормально

1\n2\n3\n


файл с ajax (index.php):

PHP:
<html><head>
<script type="text/javascript">
// Die Inaktivit&#228;tszeit, nach der automatisch gespeichert wird
var inactivity = 1;
var timer = 0;
 
function Zeitaufschub() 
{
        timer = inactivity;
}
 
function Countdown() {
        timer--;
        if(timer == 0) {
                //Die Zeit ist um, bitte speichern
                autoSave();
                Zeitaufschub();
        }
        //Die Funktion ruft sich 1x in der Sekunde alleine auf
        setTimeout("Countdown()", 1000);
}
 
function autoSave()
{
        if(window.XMLHttpRequest) {
                req = new XMLHttpRequest();
        }
        else if(window.ActiveXObject) {
                req = new ActiveXObject("Microsoft.XMLHTTP");
        }
 
        try
        {
                inhalt = document.getElementById('inhalt').value;
                id = document.getElementById('id').value;
                req.open("POST", "save.php?id="+id+"&value="+inhalt, true);
                req.onreadystatechange = triggered;
                req.send(null);
        } catch(e) {
                //nothing;
        }
}
 
function triggered() { 
        if ((req.readyState == 4) && (req.status == 200)) { 
                document.getElementById("output").innerHTML = req.responseText; 
        } 
}
 
//Rufe die Funktion auf
Zeitaufschub();
Countdown();
</script>
</head>
<body>
<hr>
<?echo nl2br($_POST['inhalt']);?>

<hr>
 
<form method="post" action="index.php">
        <input type="hidden" id="id" value="5" />		
		<TEXTAREA id="inhalt" name="inhalt" onkeyup="Zeitaufschub()"  rows="10" cols="40" wrap="hard" style="font-size:11pt;font-family:Times;overflow:hidden;"></TEXTAREA> 
<br /><input type="submit" name="abschicken" />
</form>
 <div id="output">&nbsp;</div>
</body>
</html>
получатель (save.php):

PHP:
<?php

echo nl2br($_REQUEST['value']);
<?

Благодарю за помощь.
 

Scud

Новичок
Код:
document.getElementById("output").innerHTML = req.responseText;
При отправке ответа, отправляемое обрабатывается на сервере функцией nl2br()?
 

monte

Новичок
Автор оригинала: Scud
Код:
document.getElementById("output").innerHTML = req.responseText;
При отправке ответа, отправляемое обрабатывается на сервере функцией nl2br()?
да.

PHP:
echo nl2br($_REQUEST['value']);
 

monte

Новичок
array(3) { ["id"]=> string(1) "5" ["value"]=> string(3) "123" ["LThttp127001blog"]=> string(32) "d292fe7ae6fa6aee5970feac19c564f8" }
 

Scud

Новичок
Код:
req.open("POST", "save.php?id="+id+"&value="+encodeURIComponent(inhalt), true);
 

monte

Новичок
благодарю, всё работает.

-~{}~ 08.08.07 15:58:

работает, но не всё. если перенос строчки ручной, то всё ок.
но если автоматический, вызванный через wrap="hard", то опять игнорируется. :(
 

Scud

Новичок
Что это за атрибут такой wrap, в стандарте его нет....
Мне кажется тебе надо посмотреть на функцию wordwrap().
 

monte

Новичок
wrap помоему является стандартом html
если посылаю через форму, то перенос нормальный. система опознаёт переносы и нормально обрабатывает через nl2br.


общая задача у меня ограничить количество строчек в теле textarea

я пробовал через javascript, тут возникла большая проблема по интерпретации проузерами, даже одинаковыми.

сейчас возникла идея проверить путём ajax средствами php во время написания сообщения или через кнопку проверить.

-~{}~ 08.08.07 16:58:

я предполагал в файле обработчике сделать проверку на количество строчек

//Максимальное количество
$a_anzahl=11;

$artikel_text_new_1=nl2br($_REQUEST['value']);

//всего осталось
$zeilen_art_1 = $a_anzahl - substr_count($artikel_text_new_1, '<br />');
 

dimagolov

Новичок
monte, задача о кол-ве строк в textarea это задача для JavaScript и не нужно ее на сервере решать, а нужно разобраться в JavaScript и сделать по-человечески.
 

monte

Новичок
Автор оригинала: dimagolov
monte, задача о кол-ве строк в textarea это задача для JavaScript и не нужно ее на сервере решать, а нужно разобраться в JavaScript и сделать по-человечески.
задача не в количестве строк, а в ограничении ввода при определённом количестве.

я уже несколько месяцев её решаю :(

проблемы начинаются, если не сам пишешь текст, а к примеру копируешь с другого места.

первая идея была отловить переходы \n с комбинацией проверки по длине строчки.
вторая была по проверки на возникание полосы прокрутки.
но обе вещи работают очень не стабильно.

поэтому следующая идея, это проверка на сервере через php по средствам ajax. чтоб уже гарантированно работало.

если кто сталкивался, буду рад любой помощи:confused:
 

Scud

Новичок
Предлагаю изложить нам суть задачи:
задача не в количестве строк, а в ограничении ввода при определённом количестве.
В моём хрустальном шаре предсказании задач пока всё в тумане.
--
Хотя нет, тикающий счётчик за использование моего не бесплатного времени я вижу очень отчётливо.
 

monte

Новичок
общая задача была создание системы для автоматического создания небольших газеток в формате pdf. редактора пишут заметки, пользователи могут выбрать что их интересует и создать из заметок свою маленькую 4 страничную газетку.

заметки могут быть 1/4, 2/4, 3/4 или на всю страницу.
причём, редакторам должно быть отчётливо видна рамка и границы.
при написании заметки редактор выбирает размер статьи через темплейт и пишет или копирует из другого места текст.

в принципе система сделана, генерируются pdf, но большая проблема осталась :(

сделать это поле для написании статьи соответствующего размера. чтоб в него нельзя было больше вписать или добавить методом копирования, чем определённый размер по ширине и высоте.

-~{}~ 09.08.07 14:05:

я могу заплатить за хорошее рабочее решение, если конечно сумма будет мне по карману :(
 

Scud

Новичок
Если ты значешь сколько места по ширине и высоте занимает каждый символ в создаваемом PDF документе, то написать алгоритм расчёта занимаемой площади, я думаю, не слишком сложно. Составь таблицу символ => ширина, высота, и считай.
 

monte

Новичок
мои знания в ява скрипт и приминении ограничены.
пока я вижу, что зашёл в тупик и ищу другие пути решения.

к примеру:
написать алгоритм расчёта занимаемой площади, я думаю, не слишком сложно. Составь таблицу символ => ширина, высота, и считай.

я что то не могу въехать, если даже у меня будет такая информация, то как я смогу её использовать для моих целей.
да и если честно, я такое наверное не смогу создать, не хватит знаний.
 

Scud

Новичок
Аааа...
В цикле пробежать по строке, полученной из value из textarea, и зная ширину каждого символа, максимальную ширину строки и высоту линий в тексте посчитать сколько всего по высоте займёт текст? Сложно...
 
Сверху