Forum Webscript.Ru
Программирование => Perl => Тема начата: от 07 Мая 2002, 05:48:29
-
Что за загадочный символ?
Я хочу сделать так, чтобы в HTML-странице текст, введенный пользователем в
-
Если ты хочешь сохранить исходный вид текста то к чему сжимать пробелы? Пусть они остаються. Теперь \\n заменяем
на
и еще. Я не знаю, могет это только под виндами но у меня при сохранении из текстареа сохранялся символ перевода и ЕЩЕ возврата тоесть \\n и \\r.
приходилось и его грохать =~s/\\r//g;
-
Вопрос в том, что при помещении из базы в текстареа пробелы проставляются правильно, а при повторной записи этих пробелов в текстовый файл базы и появляется этот странный символ, который только выглядит как пробел, но не опознается Перлом в s/ / /g. Это же принципиально важно, что это за неучтенные символы возникают? Я, например, чтобы это обнаружить, потратил день, думал крыша едет - вижу пробел, а очистить не могу!
-
Что же, на целом форуме нет специалистов по кодировкам?
ж-(
-
>>который только выглядит как пробел, но не опознается Перлом в s/ / /g
А эти загадочные символы в TEXTAREA на каком этапе появляются? Возьми и записывай в файл эту строку на протяжении всей работы скрипта. Получил данные от пользователя, записал. Перед тем как класть в базу еще раз записал. Взял из базы - записал. А потом смотри, когда они появились. Никто кроме тебя это делать не будет.
-
Это точно!
Этот символ нужно где-то перехватить (послать методам GET к примеру и разбирать сторку адреса %20 - к примеру пробел, смотри что вместо него)
-
В строке запроса это %A0.
В блокноте, если базу смотреть, это пробел.
Но он не чистится регулярными выражениями $text=~s/ / /g;
А так $text=~s/\\xA0/ /g; опознается!
Что это за \\xA0, он же %A0, в записанном текстовом файле пробелом выглядит.
-
При разборе строки запроса я меняю все ненужные символы на пробелы, а потом их сжимаю к одному.
$value =~ s/\\cM/ /g;
$value =~ s/\\|/ /g;
$value =~ s/\\n/
/gi;
$value =~ s/<br>/
/gi;
$value =~ tr/ / /s;
ну и т.д.
Кстати, что такое \\cM ?
-
Кстати, что такое \\cM ?
Так обозначаются управляющие символы (в твоем случае - комбинация Ctrl + символ "M"). А ты откуда это взял? И, главное, зачем, если не знаешь, что это?
-
>В строке запроса это %A0.
>В блокноте, если базу смотреть, это пробел.
Я думаю, что никого не интересует, как этот символ выглядит в блокноте. В любом случае это не пробел. А откуда он взялся в строке запроса???? Символы там сами по себе не зарождаются.
-
Ни фига себе никого не интересует! Перл же не работает! Это не только в блокноте, это во всех текстовых и HTML-редакторах. Сами попробуйте.
Я же выше подробно писал, в какой момент это появляется. Данные из форм идут через одну и ту же, вполне стандартную, функцию разбора формы POST и GET. ТОлько и разницы, что я пробелы из текстареа меняю на \\& nbsp; перед записью в базу, чтобы форматирование пользователя сохранить в-точности для HTML. Просто несколько пробелов подряд, как Вы понимаете, в HTML будет выглядеть как один. К тому же не хочется писать разные правила разбора форм для всех возможных вариантов довольно большого скрипта, что я сейчас пишу. А так я везде, одной и той же функцией, сжимаю все последовательные пробелы к одному. Но если в текстареа загрузить текст с \\& nbsp; из текствой базы, дописать что-нибудь, и записать его опять в базу, то вот и появляются эти злополучные символы, которые уже ни пробелы, ни \\& nbsp; Apache пишет: \\xA0 - неопознанный символ!
\\& nbsp; - это unbrеakable space. А то здесь это печатается как пробел, не комментируясь, поэтому пишу через паузу.
-
>Ни фига себе никого не интересует! Перл же не работает!
Случаи, когда Перл не работал известны, но их мало. И я боюсь, это не тот случай.
>Это не только в блокноте, это во всех текстовых и HTML-редакторах.
И я еще раз повторяю, меня не интересует как это символ выглядит в блокноте или других редакторах. Я могу сделать фонт, где ВСЕ символы будут ВЫГЛЯДЕТЬ как пробелы. Но это значит, что для ПЕРЛА они станут пробелами. \\xA0 - это не пробел. И $text=~s/ / /g; с ним работать не будет.
>Я же выше подробно писал, в какой момент это появляется.
Что-то я не заметил. Одно я знаю точно - Перл всегда очень корректно работал с любыми символами, даже корректнее чем Си. Си запнется строке с нулевым символом, а для Перла ВСЕ символы равны. Он никогда ничего не заменяет и не вставляет, пока его не попросить. Поэтому я и советовал ТОЧНО определить, КТО именно вставляет этот символ. Для чего надо после каждого блока программы вывести данные в файл. Как я понимаю, это сделано не было.
>Смотрим в Блокноте HTML-код: в
-
>Так если эти символы уже в TEXTAREA не являются пробелами, а только выглядят как пробелы, то значит и Перл получает НЕ пробелы
Так а кто же взял из базы nbsp; и поместил их в Textarea, как не Перл? А потом записал опять в базу, и они уже не пробелы?
И разве сама эта операция не является "выводом данных в файл", или я что-то не понимаю. Ну сделаю я еще один файл, и там тоже увижу пробел-непробел.
А Перл я тоже люблю. Благородный язык.
-
:)) Сейчас прочитал свое предыдущее сообщение, и заметил там чудовищную ошибку. Надо читать так: "Но это НЕ значит, что для ПЕРЛА они станут пробелами." Хотя об этом можно было догадаться по контексту.
Значит так, мы имеем связку: броузер - всемозможные прокси (если есть) - вебсервер - Перл - база данных. Так вот из всех этих вещей я бы в последнюю очередь стал подозревать Перл. Мне приходилось работать в Перле с бинарными данными и ни разу никаких глюков замечено не было. Он НЕ МОЖЕТ сам заменить символы, если его не попросить.
>И разве сама эта операция не является "выводом данных в файл"
Нет. Я не знаю, что делает с данными база. Поэтому я бы ПЕРЕД помещением данных в базу и ПОСЛЕ получения данных из базы записал бы их в обычный бинарный файл и проверил бы, что там на самом деле стоит. Тоже самое я бы проделал бы ПЕРЕД отдачей данных серверу и ПОСЛЕ получения данных от сервера. И тогда узнал бы, кто именно заменяет этот символ (я уверен, что это не Перл). Если бы это не помогло, тогда я прикинулся бы броузером и послал бы запрос скрипту с помощью LWP, сохранил бы ответ в файл и узнал, что получает броузер от сервера. И т.д., если есть желание разобраться, откуда берется этот символ. А можно и не разбираться. Заменять этот символ на то, что надо и не заморачивать себе голову.