Автор Тема: Проблемы с TEXTAREA продолжаются!  (Прочитано 6890 раз)

0 Пользователей и 1 Гость просматривают эту тему.

  • Гость
Проблемы с TEXTAREA продолжаются!
« : 01 Июля 2002, 05:22:14 »
Проблемы с TEXTAREA продолжаются!

Вставляем из файла код перлового скрипта или HTML в текстареа - и что мы видим? Специальные символы, которые начинаются на & - интерпретируются. Например, вместо & nbsp; вставляется пробел, вместо & copy; вставляется кружок с буквой "с" внутри, вместо & euro; вставляется знак евро и т.д. Здесь я специально разнес на всякий случай, чтобы и здесь проблем этих не было.

Как отвадить TEXTAREA от этого, чтоб писало, как есть в файле?

А совершенно случайно обнаружилось еще хуже - & para; интерпретируется как знак "пи" вытянутый такой (не знаю, что это такое), так вот ему даже не нужно точку с запятой в конце ставить! У меня в коде ссылка была такая (без паузы после амперсанда), так когда это загрузить из файла (open (FILE,"f.pl") и т.д.), то в ссылке стоит уже знак "пи", или как его там, вместо & para, а дальше по тексту - metr=1">. И ссылка после записи обратно в файл естественно не работает.

Значит, если у Вас есть имя функции, начинающейся на para..., которая вызывается & para...; и Вы ее будете загружать в TEXTAREA, то уже ее не обнаружите, а после записи из TEXTAREA в файл скрипт потеряет работоспособность!

Пока что я придумал только разносить амперсанд на пробел перед загрузкой в TEXTAREA, а при записи из TEXTAREA опять склеивать. Неприятно, ведь код не так выглядит, как в файле. Может есть какой-то способ с этими спецсимволами в TEXTAREA бороться? Может, у них есть какое-то специальное объединяющее обозначение как группы символов типа \\x88..., \\xA0...?

® ™ & lt; € ¶ & quot; ©  
® < € " © ™


Асы, откликнитесь!

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблемы с TEXTAREA продолжаются!
« Ответ #1 : 01 Июля 2002, 08:43:28 »
Цитировать
Вставляем из файла код перлового скрипта или HTML в текстареа
Вначале, определись, что ввводишь в форму: text/plain, text/html или что иное. Если не знаешь, формат данных в конкретном элементе формы, то это не лечится!
Если вводишь text/plain (как это чаще бывает), то перед тем, как вставлять этот текст в HTML, необходимо "спрятать" некоторые спец.символы:

sub text_plain($)
{
$_[0]=~s/&/&/g;
$_[0]=~s/"/"/g;
$_[0]=~s/$_[0]=~s/>/>/g;
$_[0]=~s/\\n/
\\n/g;
return $_[0];
}

Ну примерно так. Кавычки прятать не обязательно.

Цитировать
ему даже не нужно точку с запятой в конце ставить!
Почти всегда такие последовательности будут работать и без точки с запятой.

Так вот, основная мысль - всегда нужно знать формат данных, остальное - ерунда. В принципе, можно даже написать некий анализатор вводимых данных, чтобы формат определялся автоматически, но это уже извращение.
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн ESE

  • Фанат
  • Постоялец
  • ***
  • Сообщений: 172
  • +0/-0
  • 2
    • Просмотр профиля
    • http://comp.hobi.ru
Проблемы с TEXTAREA продолжаются!
« Ответ #2 : 01 Июля 2002, 15:58:55 »
Да, и я делал примерно так как YA говорит. А можешь & заменить на набор символов или слово amperand например а при сохранении обратно
1 $text=~s/\\&/amperand/g;


2 $text=~s/amperand/\\&/g;

ну это ты и сам описал в принципе.
У програмиста две руки: левая и !левая
welcome

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблемы с TEXTAREA продолжаются!
« Ответ #3 : 01 Июля 2002, 17:59:23 »
Поправка. Должно быть так:
$_[0]=~s/&/&amp;/g;
$_[0]=~s/"/&quot;/g;

Кстати, в этом форуме ошибка - он не делает таких замен, вот и приходится по два раза писать одно и то же.

ESE, а что, если в тексте уже есть слово "amperand"? Не надо изобретаь велосипед, по крайней мере, неработающий велосипед. Все, что нужно для решения такой проблемы в HTML уже предусмотрено.
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн ESE

  • Фанат
  • Постоялец
  • ***
  • Сообщений: 172
  • +0/-0
  • 2
    • Просмотр профиля
    • http://comp.hobi.ru
Проблемы с TEXTAREA продолжаются!
« Ответ #4 : 03 Июля 2002, 01:24:16 »
2YA Полностью согласен :)
У програмиста две руки: левая и !левая
welcome

  • Гость
Проблемы с TEXTAREA продолжаются!
« Ответ #5 : 03 Июля 2002, 01:59:46 »
YA ,
а что это обозначает
$_[0]=~s/&/&/g;
$_[0]=~s/"/"/g;

меняем само на себя? - объясни, я с таким еще не сталкивался.

Цитировать
всегда нужно знать формат данных


А какой формат у перлового скрипта? Текст. Что с этого знания?

Почти всем.
Господа, Вы приводите примеры для HTML.
Да, на страницу так и надо выводить. Но я же спрашиваю совсем другое! Как выводить спецсимволы в TEXTAREA, чтоб они не интерпретировались? Чтоб, если написано & copy; (без паузы, естественно), чтоб так и в TEXTAREA выглядело. Чтоб скрипт был на себя похож. Ну какая мне радость делать замену
Цитировать
$_[0]=~s/&/&/g;
$_[0]=~s/"/"/g;

чтоб вместо & в программе писалось & amp; или какое-то слово? Мне нужно видеть реальный скрипт, вносить правки, и опять записывать это дело, исправленное, в файл скрипта.

Вот задача. Тут нужен спец по кодировкам, не столько даже по Perl...


"

  • Гость
Проблемы с TEXTAREA продолжаются!
« Ответ #6 : 03 Июля 2002, 02:10:09 »
А-а, я понял, это не само на себя, просто в этом форуме нет очистки спецсимолов, поэтому получается такое. У меня цитата такая же  получилась. А надо бы
Цитировать
$_[0]=~s/&/& amp;/g;
$_[0]=~s/"/& quot;/g;  

- я разнес тут на пробел, чтоб не интерпретировалось.

Ау, профи! Спасайся кто может!

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблемы с TEXTAREA продолжаются!
« Ответ #7 : 04 Июля 2002, 02:36:43 »
Цитировать
меняем само на себя? - объясни, я с таким еще не сталкивался.
А если по внимательнее читать? Я уже объяснил (см. выше).
Цитировать
Тут нужен спец по кодировкам
Вот кодировки здесь совершенно не причем.
Цитировать
Ау, профи! Спасайся кто может!

Не понял, какие еще проблемы остались? Вроде, все разобрали. Чем тебя не устраивает предложенный вариант?
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн Kwazar

  • Философ
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.uhuhu.ru/
Проблемы с TEXTAREA продолжаются!
« Ответ #8 : 04 Июля 2002, 10:29:12 »
Вы забыли еще один распостранненый вещь :)
Если в тексте закрыть тег текстареи - то она закроется, и ниже пойдет Html. Чем некоторые личнсти и пользуються, зарыв туда фва скрипт, выцепляющий ваши куки и пересылая их себе :(
С уважением Сергей

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблемы с TEXTAREA продолжаются!
« Ответ #9 : 04 Июля 2002, 18:02:06 »
Kwazar
А это на что:
Цитировать
$_[0]=~s/$_[0]=~s/>/>/g;

? Такая обработка не позволит закрыть тэг.
Литературный перевод с русского и английского на Perl. Дорого!

  • Гость
Проблемы с TEXTAREA продолжаются!
« Ответ #10 : 05 Июля 2002, 02:32:38 »
Забудьте Вы о регулярных выражениях  на минуточку. Речь идет не о том, чтобы спецсимволы , например < , поменять на его описание через &..., а прямо наоборот - если в коде уже стоит такое описание & lt;, и надо его таковым и сохранить, чтоб не превращалось в треугольный вид, т.е. чтоб не интерпретировалось при выводе в окно броузера.  Чтоб вместо буквы "с" в кружочке оставалось & copy; только без пробела и т.д. Вчитайтесь в то, что Вас спрашивают, а не рубите примитив сплеча.
Ну кто бы Вас тут на форуме спрашивал задачки для первого класса по Перлу, типа $_[0]=~s/
Я насчитал 108 спецсимволов, и теперь ясно, что при выборе имен для форм нужно проверять, чтобы они не совпадали с описанием спецсимволов. Потому как, если вы назовете кнопку, скажем, parametr, а потом используете это для вывода в HTML - ссылке, например, так:

 

, то можете получить нерабочую ссылку. Потому что & para; - это спецсимвол.  Мне в своем скрипте (> 2000 строк) пришлось поменять это имя parametr на par , поскольку решения задачи не найдено.

Вами, похоже, тоже.

  • Гость
Проблемы с TEXTAREA продолжаются!
« Ответ #11 : 05 Июля 2002, 02:35:05 »
Ну вот видите - и здесь такая же лажа вылезла!!! А ссылка была такой - , только без пробела.

Оффлайн ESE

  • Фанат
  • Постоялец
  • ***
  • Сообщений: 172
  • +0/-0
  • 2
    • Просмотр профиля
    • http://comp.hobi.ru
Проблемы с TEXTAREA продолжаются!
« Ответ #12 : 05 Июля 2002, 04:13:38 »
Ну что значит вылезла??? Посмотри HTML! Там исходник в чистом виде (ну а то что броузер вытворяет оно так и будет).
Идем в начало
Цитировать
Вначале, определись, что ввводишь в форму: text/plain, text/html или что иное. Если не знаешь, формат данных в конкретном элементе формы, то это не лечится!
У програмиста две руки: левая и !левая
welcome

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблемы с TEXTAREA продолжаются!
« Ответ #13 : 05 Июля 2002, 08:09:27 »
Цитировать
Чтоб вместо буквы "с" в кружочке оставалось & copy; только без пробела и т.д. Вчитайтесь в то, что Вас спрашивают, а не рубите примитив сплеча.

:) Вчитывался уже не раз... У меня остается всегда в виде &copy; - заметь, что пробела нет! И мне для этого достаточно только ...=~s/&/&amp;/g;. Вот попробуй теперь объяснить, в каких случаях это у тебя не работает.

PS Ты бы зарегистрировался что-ли...
Литературный перевод с русского и английского на Perl. Дорого!

  • Гость
Проблемы с TEXTAREA продолжаются!
« Ответ #14 : 06 Июля 2002, 03:04:30 »
Цитировать
Вот попробуй теперь объяснить, в каких случаях это у тебя не работает.


Попробую.
Берем простой Перл файл. Мы его хотим загрузить в броузер с HTML, чтоб код выглядел, как в оригинале. Ясно, что приходится чистить:

open(FILE,"$file.pl")
@strings=;
close (FILE);

foreach (@strings) {  
s/&/& amp;/g;
s/\\s/\\>/& gt;/g;
s/\\n/
\\n/gi;
}

print @strings;

Все прекрасно, чиститься. Кроме случаев, если попадается в исходнике такой спецсимвол, как &copy;.  
Кстати, > (& gt;)  - тоже считается спецсимволом, но с ним нет проблем. Спецсимвол спецсимволу - рознь.
Еще такие же - & reg; или & para; или & quot;

Для & amp;copy;  замена s/&/& amp;/g; не поможет. Все равно будет кружок.

Вы говорите, что чтобы &copy;  выглядело без пробела, достаточно замены ...=~s/&/& amp;/g;. Но где Вы ее используете, что-то я не пойму. Вы ведь просто сюда в форму вставили & amp;copy;  Это же совсем другое!

Попробуйте таким образом, как я написал, любой файл вывести на экран, в котором есть &copy;  в любом месте текста - и посмотрите, что получится.

Цитировать
Ты бы зарегистрировался что-ли...

А зачем?

 

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