TextArea удваивает все переносы строк - PullRequest
4 голосов
/ 07 января 2012

Сегодня я столкнулся с действительно странным поведением textarea.Я исправлял это целый день, и я до сих пор не могу найти решение.Буду признателен за любую помощь, поэтому спасибо заранее.

Я создаю приложение GAE-python.И у меня есть эта маленькая форма здесь:

<form action="/add" method="post">
<div><textarea name="Name" rows="1" cols="60">name</textarea></div>
<div><textarea name="Email" rows="1" cols="60">email</textarea></div>
<div><textarea name="Comments" rows="6" cols="60">comments</textarea></div>
<div><input type="submit" value="Post"></div>
</form>

И я отправляю данные (поле «комментарии») через POST-запрос к скрипту Python.Но ... Почему-то я всегда получаю двойной разрыв строки или двойной CrLf в конце, которые хранятся в базе данных.Но странно, когда я отлаживаю запрос, что-то странное (как в FireFox + Firebug, так и в Chrome + DevTools).

Например, я пишу и отправляю содержимое этих комментариев через textarea:ссc

В данных, зашифрованных по URL, я вижу c% 0D% 0Ac% 0D% 0AcТак что это должно быть c CrLf c CrLf c
Но когда я копирую незашифрованный var из FireBug (DevTools) в NotePad ++, он показывает мне это:

с CRLF CRLF c CRLF CRLF c CRLF CRLF

Почему он удваивается в декодированном формате ?!И, конечно, когда я печатаю результат обратно из базы данных в браузер, я получаю все эти двойные разрывы.(когда я смотрю на этот TextProperty сущности через «Datastore Viewer», он пишется просто как «ccc»).

Еще одна вещь:
У меня есть флэш-приложение, которое отправляет послезапросы к одному и тому же python-скрипту и все разрывы строк, сделанные в текстовых полях flash, пишутся правильно.Но если я просто попытаюсь открыть этот объект базы данных через textarea в интерфейсе браузера и просто сохранить его ( без редактирования ), я получу все разрывы строк снова удвоенные.

Есть ли какие-либо исправлениятого, что?

Спасибо.

1 Ответ

2 голосов
/ 07 января 2012

По спецификациям и в практике браузеров, новая строка в пользовательском вводе в textarea, как передано пара CR LF,% -кодируется как% 0D% 0A. Скорее всего, это то, что получает ваш серверный скрипт, хотя вы можете проверить это, выгружая необработанные данные, которые он получает. Что произойдет, зависит от вашего сценария и его взаимодействия с базой данных.

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

...