как избавиться от замены спецсимволов в форме

jer

...
как избавиться от замены спецсимволов в форме

После вставки текста (в частности xslt-кода) в форму (в textarea) спецсимволы (& amp; & quot; & nbsp; и т.д.) заменяются при редактировании на (& " <space> и .т.д.) соответсвтвенно.

При просмотре в исходном коде (html) спецсимволы присутствуют в textarea в первоначальном виде (& amp; & quot; & nbsp; и т.д.) но при редактировании и при посте заменяются на (& " <space> и .т.д.).

Причем это происходит браузерозависимо - в Mozilla не заменяются, в IE заменяются, другие не проверял.

как это можно побороть?
 

Бочонок

http://frontender.info
Вообще то броузер занимается ОТОБРАЖЕНИЕМ предоставленой ему информации. пробелов он не добавляет. Смотри свой пхп код. При записи чего то - куда то потрудись заменить специальные символы на что - то и при чтении чего - то откуда - то не забудь проделать то же самое, но в обратной последовательности.

Бочонок.
 

jer

...
Бочонок

Чем занимается браузер я знаю. Я и не говорил что он добавляет пробелы. Я сказал, что браузер (только IE, Mozilla не меняет) заменяет спецсимволы на их отображение (& amp; на &, например). Понятно, что можно перед вставкой в форму менять спецсимволы на ЧТО-ТО, а потом обратно, но такой вариант не подходит.

Возможно в ИЕ у формы есть какое-то свойство отвечающее за это. ???

Мне требуется чтобы вставленный в форму код отображался и постился без изменений. И чтобы это работало в любом браузере.

Думаю много кто уже сталкивался с такой задачей.
 

Frol

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

Фанат

oncle terrible
Команда форума
jer
никакне избавиться.
спецсимволы надо просто выводить по стандарту - и все будет работать нормально
 

Бочонок

http://frontender.info
Frol прав. Спец символы на Что то (их визуальное представление или какое то специфическое тобой выдуманое) заменять придеться. С помощью ПХП. При записи и при чтении.
 

Бочонок

http://frontender.info
На экране мы видим &ampamp;; Но вообще то он представлен как &amp;amp;amp;. Будет значительно лучше, если в бд все же будет &amp;amp; или вообще &. Так как бд создается на нное количество лет. Скрипт может быть изменен, а информация не должна от него зависить. То есть в бд лутше писать (Коля по кличке "БОЛЬШОЙ" ) чем (Коля по кличке &amp;БОЛЬШОЙ&amp; ) и уж тем более не (Коля по кличке &amp;amp;БОЛЬШОЙ&amp;amp; ) . Это ведь база Данных а не база Кода.
 

Фанат

oncle terrible
Команда форума
что-то я тебя не понимаю.
То ты говоришь - заменять, то - не заменять.
если лушче хранить кавычку, а не &amp;, как ты сейчас говоришь, то зачем тогда заменять при записи?
 

Бочонок

http://frontender.info
Насколько я понимаю пост с вопросом, Надо, что бы в форме на стороне клиента, клиент нажимал на кнопку "&" и получал в форму значок &amp;amp;. (То-есть при редактировании поста он мог использовать спец. символы. И видеть их без интерпретации броузером.) Для того, что бы в форме прописать спец символ Frol предложил (для примера) заменять &amp;amp; на &amp;amp;amp; и таким образом получать в броузере его представление. Если я все правильно понял. А потом отправлял полученый текст с спец символами скрипту для записи в бд. В бд все это не к чему и мы перед записью в скрипте заменяем в поступившем тексте все &amp;amp;amp; на &.
 

Фанат

oncle terrible
Команда форума
Бочонок, ты бредишь.
Холодное полотенце на голову и неделя воздержания от компьютера.

Не надо никаких представлений с заменами.

-~{}~ 21.09.04 20:21:

jer
Чем занимается браузер я знаю
очень сомнительно
браузер (только IE, Mozilla не меняет) заменяет спецсимволы на их отображение
неправда.
ничего браузер не заменяет.
что вставлено в форму (руками) - то и отправляет.
 

Бочонок

http://frontender.info
Ужас.
Что я сказал не так не понял (было бы неплохо, если бы ты обьяснил.)
Но полотенцем я уже обвязался, а про остальное подумаю.

80))))))))
 

Фанат

oncle terrible
Команда форума
он вставляет текст из буфера.
и думает, что браузер ПРИ ОТПРАВКЕ что-то заменяет.

будь проще.
все эти фантазии с тем, что якобы человек хочет видеть на экране не то, что запишется потом в базу - бред.
Запомни раз и навсегда - в базу надо класть РОВНО ТО, что пользователь ввел.
Никакой самодеятельности.
 

jer

...
отвечаю всем

чтобы быстрее разобраться в проблеме предлагаю код для тестирования:
PHP:
<html>
<head>
<title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=Windows-1251">

</head>

<body>

<?
  if (isset($_POST['go']))
  {
    echo 'выводимый код смотреть в исходнике<br/>';
    echo $_POST['xslt'];
  }
?>

<form action="test.php" method="post">

<textarea name="xslt" cols="50" rows="15">
<xsl:template match="prod">
  <xsl:if test="prod/@num &gt; 10">
    done!
  </xsl:if>
</xsl:template>
</textarea>
<br/>
<input type="submit" name="go" value="post">

</form>

</body>
</html>
протестируйте его под Мозиллой и под ИЕ.

в одном варианте &gt; заменяется на >, в другом нет. так что это зависит от браузера!

замена &amp;amp; на &amp;amp;amp; не подходит т.к. в ИЕ это заменится на &amp;amp;, а в Мозилле будет выводится &amp;amp;amp;

пока единственный вариант я вижу - определять яваскриптом браузер и для ИЕ заменять &amp; на &amp;amp;
 

Фанат

oncle terrible
Команда форума
при чем здесь мозилла и ие?
тебе сказали - если выводишь в текстарию для редактирования - htmlspecialchars
ты не заметил, не понял, или тебе просто лень?
 

jer

...
Фанат

в общем я разобрался.
просто сначала я не видел связи с htmlspecialchars, в смысле необходимость его использования, но сейчас понял - выяснил.

Мозилла не преобразует спецсимволы в тегах (только вне тегов) в их отображение, т.е.
<xsl:if test="a &gt; b"> будет так и отображаться <xsl:if test="a &gt;">,
а
&lt;xsl:if test="a &gt; b"&gt; преобразуется в <xsl:if test="a > b">

а ИЕ и в тегах нормально преобразует спецсимволы.

следовательно htmlspecialchars помогло. все верно!

ps: меня смутило отображение мозиллой спецсимволов внутри тегах. как работает htmlspecialchars я знаю. я и пытался имитировать ее работу вручную. но я делал это частично, надо было еще символы обрамляющие теги < и > земенять на &lt; и &gt;

pss: иногда любопытные вещи обнаруживаешь пока докопаешься до истины :)

всем спасибо!
 

Фанат

oncle terrible
Команда форума
меня смутило слово "вставка" в твоем вопросе.
я решил, что вставляется не скриптом, а руками из буфера.
 

jer

...
Фанат

ясно. под "вставкой" я имел в виду - ну уже всем понятно что имел в виду ;)
главное, что в итоге с твоей помощью и своими экспериментами я разобрался.
в любом случае спасибо!

-~{}~ 22.09.04 02:01:

фролу и Бочонку тоже спасибо!
 
Сверху