Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Не получили
письмо с кодом активации
?
1 час
1 день
1 неделя
1 месяц
Навсегда
Новости:
Начало
Помощь
Поиск
Календарь
Вход
Регистрация
Forum Webscript.Ru
»
Программирование
»
Perl
»
Что за загадочный символ?
« предыдущая тема
следующая тема »
Печать
Страницы: [
1
]
Вниз
Автор
Тема: Что за загадочный символ? (Прочитано 3687 раз)
0 Пользователей и 1 Гость просматривают эту тему.
Гость
Что за загадочный символ?
«
:
07 Мая 2002, 05:48:29 »
Что за загадочный символ?
Я хочу сделать так, чтобы в HTML-странице текст, введенный пользователем в
, и сохраненный в текстовом файле - базе, выглядел при вызове точно так же, с сохранением форматирования пользователя, т.е. чтобы все осознанные отступы, пробелы и переносы также сохранялись. Для этого пользуемся регулярными выражениями:
=~ s/\\n/
/g;
=~ s/\\s\\s/\\ \\; /g;
и сжимаем лишние пробелы
=~ tr/ / /s;
В базе появляется запись, например: | Текст пользователя... | .
Вызываем это опять в то же поле
- все хорошо, пробелы сохранены. Теперь пусть пользователь дописывает сюда еще что-то, а пробелы в начале не трогаем (они устраивают, допустим). Смотрим в Блокноте HTML-код: в
уже стоят не , а пробелы, ровно столько сколько было. Но это только внешне. При сохранении опять в базу они уже не осознаются программой как пробелы, и не меняются в s/\\s\\s/\\ \\; /g; и не сжимаются tr/ / /s. В других местах программы используется тот же пользовательский текст, но там он нужен уже без всяких пробелов. Регулярные выражения эти псевдопробелы не опознают, ни s/ / / , ни s/\\s/ / (кстати, в чем разница?). Долго я с эти проморочился, пока не вызвал намеренной ошибки, скопировав эту загадочную пустоту в отдельную строку Perla, и лог ошибок вот что написал: Неопознанный символ \\xA0 (икс A ноль). Я полез в кодировки - действительно, ни в win-1251, ни в KOI-8 нет такого. Тогда я чищу так - tr/\\xA0/ /s; - работает!
Т.е. получается так - при первом сохранении в базу это нормальные пробелы, а если это скопированный из базы в поле
, то это уже только отображается на экране пробелом, а на самом деле \\xA0.
Так что же это за загадочный символ такой?
Кто-нибудь сталкивался с подобной проблемой? У меня Апач+Windows.
И сопутствующий вопрос: Как лучше (правильнее, эффективнее) сжимать лишние пробелы
s/ +/ /g; или tr/ / /s; ?
Спасибо.
Записан
ESE
Фанат
Постоялец
Сообщений: 172
+0/-0
2
Что за загадочный символ?
«
Ответ #1 :
07 Мая 2002, 13:10:26 »
Если ты хочешь сохранить исходный вид текста то к чему сжимать пробелы? Пусть они остаються. Теперь \\n заменяем
на
и еще. Я не знаю, могет это только под виндами но у меня при сохранении из текстареа сохранялся символ перевода и ЕЩЕ возврата тоесть \\n и \\r.
приходилось и его грохать =~s/\\r//g;
Записан
У програмиста две руки: левая и !левая
welcome
Гость
Что за загадочный символ?
«
Ответ #2 :
08 Мая 2002, 03:28:05 »
Вопрос в том, что при помещении из базы в текстареа пробелы проставляются правильно, а при повторной записи этих пробелов в текстовый файл базы и появляется этот странный символ, который только выглядит как пробел, но не опознается Перлом в s/ / /g. Это же принципиально важно, что это за неучтенные символы возникают? Я, например, чтобы это обнаружить, потратил день, думал крыша едет - вижу пробел, а очистить не могу!
Записан
Гость
Что за загадочный символ?
«
Ответ #3 :
15 Мая 2002, 02:37:56 »
Что же, на целом форуме нет специалистов по кодировкам?
ж-(
Записан
Гость
Что за загадочный символ?
«
Ответ #4 :
15 Мая 2002, 05:19:18 »
>>который только выглядит как пробел, но не опознается Перлом в s/ / /g
А эти загадочные символы в TEXTAREA на каком этапе появляются? Возьми и записывай в файл эту строку на протяжении всей работы скрипта. Получил данные от пользователя, записал. Перед тем как класть в базу еще раз записал. Взял из базы - записал. А потом смотри, когда они появились. Никто кроме тебя это делать не будет.
Записан
ESE
Фанат
Постоялец
Сообщений: 172
+0/-0
2
Что за загадочный символ?
«
Ответ #5 :
15 Мая 2002, 11:55:26 »
Это точно!
Этот символ нужно где-то перехватить (послать методам GET к примеру и разбирать сторку адреса %20 - к примеру пробел, смотри что вместо него)
Записан
У програмиста две руки: левая и !левая
welcome
Гость
Что за загадочный символ?
«
Ответ #6 :
16 Мая 2002, 03:33:57 »
В строке запроса это %A0.
В блокноте, если базу смотреть, это пробел.
Но он не чистится регулярными выражениями $text=~s/ / /g;
А так $text=~s/\\xA0/ /g; опознается!
Что это за \\xA0, он же %A0, в записанном текстовом файле пробелом выглядит.
Записан
Гость
в догонку...
«
Ответ #7 :
16 Мая 2002, 03:42:25 »
При разборе строки запроса я меняю все ненужные символы на пробелы, а потом их сжимаю к одному.
$value =~ s/\\cM/ /g;
$value =~ s/\\|/ /g;
$value =~ s/\\n/
/gi;
$value =~ s/<br>/
/gi;
$value =~ tr/ / /s;
ну и т.д.
Кстати, что такое \\cM ?
Записан
YA
Модератор
Глобальный модератор
Ветеран
Сообщений: 597
+0/-0
0
Что за загадочный символ?
«
Ответ #8 :
16 Мая 2002, 08:31:36 »
Цитировать
Кстати, что такое \\cM ?
Так обозначаются управляющие символы (в твоем случае - комбинация Ctrl + символ "M"). А ты откуда это взял? И, главное, зачем, если не знаешь, что это?
Записан
Литературный перевод с русского и английского на Perl. Дорого!
Гость
Что за загадочный символ?
«
Ответ #9 :
16 Мая 2002, 20:18:29 »
>В строке запроса это %A0.
>В блокноте, если базу смотреть, это пробел.
Я думаю, что никого не интересует, как этот символ выглядит в блокноте. В любом случае это не пробел. А откуда он взялся в строке запроса?
Символы там сами по себе не зарождаются.
Записан
Гость
Я думаю, что никого не интересует, как этот символ выглядит в блокноте.
«
Ответ #10 :
17 Мая 2002, 03:37:05 »
Ни фига себе никого не интересует! Перл же не работает! Это не только в блокноте, это во всех текстовых и HTML-редакторах. Сами попробуйте.
Я же выше подробно писал, в какой момент это появляется. Данные из форм идут через одну и ту же, вполне стандартную, функцию разбора формы POST и GET. ТОлько и разницы, что я пробелы из текстареа меняю на \\& nbsp; перед записью в базу, чтобы форматирование пользователя сохранить в-точности для HTML. Просто несколько пробелов подряд, как Вы понимаете, в HTML будет выглядеть как один. К тому же не хочется писать разные правила разбора форм для всех возможных вариантов довольно большого скрипта, что я сейчас пишу. А так я везде, одной и той же функцией, сжимаю все последовательные пробелы к одному. Но если в текстареа загрузить текст с \\& nbsp; из текствой базы, дописать что-нибудь, и записать его опять в базу, то вот и появляются эти злополучные символы, которые уже ни пробелы, ни \\& nbsp; Apache пишет: \\xA0 - неопознанный символ!
\\& nbsp; - это unbrеakable space. А то здесь это печатается как пробел, не комментируясь, поэтому пишу через паузу.
Записан
Гость
Что за загадочный символ?
«
Ответ #11 :
17 Мая 2002, 10:18:34 »
>Ни фига себе никого не интересует! Перл же не работает!
Случаи, когда Перл не работал известны, но их мало. И я боюсь, это не тот случай.
>Это не только в блокноте, это во всех текстовых и HTML-редакторах.
И я еще раз повторяю, меня не интересует как это символ выглядит в блокноте или других редакторах. Я могу сделать фонт, где ВСЕ символы будут ВЫГЛЯДЕТЬ как пробелы. Но это значит, что для ПЕРЛА они станут пробелами. \\xA0 - это не пробел. И $text=~s/ / /g; с ним работать не будет.
>Я же выше подробно писал, в какой момент это появляется.
Что-то я не заметил. Одно я знаю точно - Перл всегда очень корректно работал с любыми символами, даже корректнее чем Си. Си запнется строке с нулевым символом, а для Перла ВСЕ символы равны. Он никогда ничего не заменяет и не вставляет, пока его не попросить. Поэтому я и советовал ТОЧНО определить, КТО именно вставляет этот символ. Для чего надо после каждого блока программы вывести данные в файл. Как я понимаю, это сделано не было.
>Смотрим в Блокноте HTML-код: в
уже стоят не , а пробелы, ровно столько сколько было. Но это только внешне. При сохранении опять в базу они уже не осознаются программой как пробелы, и не меняются в s/\\s\\s/\\ \\; /g;
Так если эти символы уже в TEXTAREA не являются пробелами, а только выглядят как пробелы, то значит и Перл получает НЕ пробелы. Зачем тогда говорить, что Перл не работает?
Записан
Гость
Что за загадочный символ?
«
Ответ #12 :
18 Мая 2002, 03:08:53 »
>Так если эти символы уже в TEXTAREA не являются пробелами, а только выглядят как пробелы, то значит и Перл получает НЕ пробелы
Так а кто же взял из базы nbsp; и поместил их в Textarea, как не Перл? А потом записал опять в базу, и они уже не пробелы?
И разве сама эта операция не является "выводом данных в файл", или я что-то не понимаю. Ну сделаю я еще один файл, и там тоже увижу пробел-непробел.
А Перл я тоже люблю. Благородный язык.
Записан
Гость
Что за загадочный символ?
«
Ответ #13 :
18 Мая 2002, 06:07:10 »
Сейчас прочитал свое предыдущее сообщение, и заметил там чудовищную ошибку. Надо читать так: "Но это НЕ значит, что для ПЕРЛА они станут пробелами." Хотя об этом можно было догадаться по контексту.
Значит так, мы имеем связку: броузер - всемозможные прокси (если есть) - вебсервер - Перл - база данных. Так вот из всех этих вещей я бы в последнюю очередь стал подозревать Перл. Мне приходилось работать в Перле с бинарными данными и ни разу никаких глюков замечено не было. Он НЕ МОЖЕТ сам заменить символы, если его не попросить.
>И разве сама эта операция не является "выводом данных в файл"
Нет. Я не знаю, что делает с данными база. Поэтому я бы ПЕРЕД помещением данных в базу и ПОСЛЕ получения данных из базы записал бы их в обычный бинарный файл и проверил бы, что там на самом деле стоит. Тоже самое я бы проделал бы ПЕРЕД отдачей данных серверу и ПОСЛЕ получения данных от сервера. И тогда узнал бы, кто именно заменяет этот символ (я уверен, что это не Перл). Если бы это не помогло, тогда я прикинулся бы броузером и послал бы запрос скрипту с помощью LWP, сохранил бы ответ в файл и узнал, что получает броузер от сервера. И т.д., если есть желание разобраться, откуда берется этот символ. А можно и не разбираться. Заменять этот символ на то, что надо и не заморачивать себе голову.
Записан
Печать
Страницы: [
1
]
Вверх
« предыдущая тема
следующая тема »
Forum Webscript.Ru
»
Программирование
»
Perl
»
Что за загадочный символ?
Sitemap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28