Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];

Вниз

Функция замены специальных HTML символов   Найти похожие ветки 

 
0leg ©   (2007-03-28 15:44) [0]

Может есть у кого такая для Delphi?? И для обратного преобразования??


 
homm ©   (2007-03-28 15:50) [1]

> Функция замены специальных HTML символов

А какие там сиволы нужно заменять кроме «<» и «>» ??


 
Чапаев ©   (2007-03-28 16:06) [2]

> [1] homm ©   (28.03.07 15:50)
Амперсанд и кавычки, как минимум.


 
homm ©   (2007-03-28 16:16) [3]

кавычки зачем?


 
0leg ©   (2007-03-28 16:21) [4]


> А какие там сиволы нужно заменять кроме «<» и «>» ??

Специальных символов очень много, самые распространенные - & < > " "
Но есть еще куча (копирайт, параграф и т.д.). В php есть ф-я htmlentities - она делает все эти замены. Мне бы такую же для Дельфи...


 
homm ©   (2007-03-28 16:25) [5]

Аперсанд, больше менше — я согласен. Объясни мне, кавычки зачем?
Все остальные символы вполне корректно отображаются браузерами.


> В php есть ф-я htmlentities - она делает все эти замены

htmlspecialchars, если уж на о пошло. Не знаю для чего можно превую применить.


 
TRUNK ©   (2007-03-28 16:25) [6]

> homm ©   (28.03.07 16:16) [3]
> кавычки зачем?

Вот цитата с www.w3.org:

Four character entity references deserve special mention since they are frequently used to escape special characters:

"<" represents the < sign.
">" represents the > sign.
"&amp;" represents the & sign.
"" represents the " mark.
Authors wishing to put the "<" character in text should use "<" (ASCII decimal 60) to avoid possible confusion with the beginning of a tag (start tag open delimiter). Similarly, authors should use ">" (ASCII decimal 62) in text instead of ">" to avoid problems with older user agents that incorrectly perceive this as the end of a tag (tag close delimiter) when it appears in quoted attribute values.

Authors should use "&amp;" (ASCII decimal 38) instead of "&" to avoid confusion with the beginning of a character reference (entity reference open delimiter). Authors should also use "&amp;" in attribute values since character references are allowed within CDATA attribute values.

Some authors use the character entity reference """ to encode instances of the double quote mark (") since that character may be used to delimit attribute values.


 
0leg ©   (2007-03-28 16:29) [7]

У меня задача - хранить в XML-файле текст, введенный пользователем (содержимое из объектов типа TStrings).
Если кто этим занимался - посоветуйте, имеет смысл заменять все html-
сущности или можно обойтись стандартным набором (амперсанд, угловые скобки, кавычки) ?

Проблем с отображением в разных браузерах не возникнет?


 
homm ©   (2007-03-28 16:30) [8]

> TRUNK ©   (28.03.07 16:25)

Вроде не говоритс язачем, просто говорится что нужно. Правда не вижу, как кавычки могут навредить.


 
TRUNK ©   (2007-03-28 16:43) [9]

> TRUNK ©   (28.03.07 16:25) [6]

Блин. Когда копировал текст, забыл об этом самом преобразовании :)
А кавычки имеет смысл заменять, если они присутствуют в текстовых параметрах внутри тегов. Ну а чтобы не думать о том, внутри тега кавычка или снаружи, проще заменять их везде, я так думаю.


 
homm ©   (2007-03-28 16:52) [10]

> А кавычки имеет смысл заменять, если они присутствуют в
> текстовых параметрах внутри тегов.

Вот ключевое слово. Какие могут быть теги, если больше/меньше экранированы??? И почему тогда «"» не нужно экранировать, внутри из тоже можно помещать параметры.


 
Reindeer Moss Eater ©   (2007-03-28 17:20) [11]

Функция замены специальных HTML символов

Замена символов (любых, не только специальных) производится процедурами Delete, Insert, или операцией присвоения, когда со строкой работают как с массивом символов.


 
Чапаев ©   (2007-03-28 17:29) [12]

> [3] homm ©   (28.03.07 16:16)
По стандарту.


 
homm ©   (2007-03-28 17:55) [13]

> Замена символов (любых, не только специальных) производится
> процедурами Delete, Insert

Кстати в топку такой способ замены. Лучше строить паралельно новую строку, последовательно читая байты старой.


 
Reindeer Moss Eater ©   (2007-03-28 19:11) [14]

Кстати в топку такой способ замены. Лучше строить паралельно новую строку, последовательно читая байты старой.

Это способ замены символов?


 
TRUNK ©   (2007-03-28 19:22) [15]

> [10] homm ©   (28.03.07 16:52)
> Какие могут быть теги, если больше/меньше экранированы??

Чем это они экранированы ?
Я вообще-то говорил о параметре в виде строки. Если строка эта содержит, допустим, пробелы, то её надо заключить в кавычки. А если у нас сама эта строка содержит в себе кавычки, и если их не преобразовать, то они послужат символом ложного окончания параметра. Надеюсь, теперь понятно, что я имел ввиду?

> И почему тогда «"» не нужно экранировать, внутри из тоже
> можно помещать параметры

Ну, насчёт апострофа в спецификации ничего не сказано.


 
homm ©   (2007-03-28 22:08) [16]

> Это способ замены символов?
да, если нужно заменить более одного символа на последовательность симоволов больше одного, как в нашем случае.

> Чем это они экранированы ?
Нами-же, сиволами «&amp;lt;» «&amp;gt;»

> Я вообще-то говорил о параметре в виде строки.
Поздравляю, все остальные вообще-то о сабже.

> Если строка эта содержит, допустим, пробелы, то её надо
> заключить в кавычки.
Какая строка? Выдыхай скорее.

> Надеюсь, теперь понятно, что я имел ввиду?
Что твоя трава неплохово качества? :)

> Ну, насчёт апострофа в спецификации ничего не сказано.
/*глубокий затяг*/ Почему тогда твоя строка не может заключатся в опострафы? /*Ф-ф-фф*/ :)


 
Style ©   (2007-03-29 10:41) [17]

не судьба написать пару функций для преобразования HTML_ENTITY?

 type
   THTML_ENTITY = record
     vName: TLongStr;
     vChar: char;
   end;

 const
   HTML_ENTITIES: array [1..102] of THTML_ENTITY = (
     ( vName: " "    ; vChar: #32   )
   , ( vName: "&#161;"   ; vChar: #161  )
   , ( vName: "&#162;"    ; vChar: #162  )
   , ( vName: "&#163;"   ; vChar: #163  )
   , ( vName: "¤"  ; vChar: #164  )
   , ( vName: "&#165;"     ; vChar: #165  )
   , ( vName: "¦"  ; vChar: #166  )
   , ( vName: "§"    ; vChar: #167  )
   , ( vName: "&#168;"     ; vChar: #168  )
   , ( vName: "©"    ; vChar: #169  )
   , ( vName: "&#170;"    ; vChar: #170  )
   , ( vName: "«"   ; vChar: #171  )
   , ( vName: "¬"     ; vChar: #172  )
   , ( vName: "­"     ; vChar: #173  )
   , ( vName: "®"     ; vChar: #174  )
   , ( vName: "&#175;"    ; vChar: #175  )
   , ( vName: "°"     ; vChar: #176  )
   , ( vName: "±"  ; vChar: #177  )
   , ( vName: "&#178;"    ; vChar: #178  )
   , ( vName: "&#179;"    ; vChar: #179  )
   , ( vName: "&#180;"   ; vChar: #180  )
   , ( vName: "µ"   ; vChar: #181  )
   , ( vName: "¶"    ; vChar: #182  )
   , ( vName: "·"  ; vChar: #183  )
   , ( vName: "&#184;"   ; vChar: #184  )
   , ( vName: "&#185;"    ; vChar: #185  )
   , ( vName: "&#186;"    ; vChar: #186  )
   , ( vName: "»"   ; vChar: #187  )
   , ( vName: "&#188;"  ; vChar: #188  )
   , ( vName: "&#189;"  ; vChar: #189  )
   , ( vName: "&#190;"  ; vChar: #190  )
   , ( vName: "&#191;"  ; vChar: #191  )
   , ( vName: "&#192;"  ; vChar: #192  )
   , ( vName: "&#193;"  ; vChar: #193  )
   , ( vName: "&#194;"   ; vChar: #194  )
   , ( vName: "&#195;"  ; vChar: #195  )
   , ( vName: "&#196;"    ; vChar: #196  )
   , ( vName: "&#197;"   ; vChar: #197  )
   , ( vName: "&#198;"   ; vChar: #198  )
   , ( vName: "&#199;"  ; vChar: #199  )
   , ( vName: "&#200;"  ; vChar: #200  )
   , ( vName: "&#201;"  ; vChar: #201  )
   , ( vName: "&#202;"   ; vChar: #202  )
   , ( vName: "&#203;"    ; vChar: #203  )
   , ( vName: "&#204;"  ; vChar: #204  )
   , ( vName: "&#205;"  ; vChar: #205  )
   , ( vName: "&#206;"   ; vChar: #206  )
   , ( vName: "&#207;"    ; vChar: #207  )
   , ( vName: "&#208;"     ; vChar: #208  )
   , ( vName: "&Dstrok;"  ; vChar: #208  ) // для HelpMaker
   , ( vName: "&#209;"  ; vChar: #209  )
   , ( vName: "&#210;"  ; vChar: #210  )
   , ( vName: "&#211;"  ; vChar: #211  )
   , ( vName: "&#212;"   ; vChar: #212  )
   , ( vName: "&#213;"  ; vChar: #213  )
   , ( vName: "&#214;"    ; vChar: #214  )
   , ( vName: "&#215;"   ; vChar: #215  )
   , ( vName: "&#216;"  ; vChar: #216  )
   , ( vName: "&#217;"  ; vChar: #217  )
   , ( vName: "&#218;"  ; vChar: #218  )
   , ( vName: "&#219;"   ; vChar: #219  )
   , ( vName: "&#220;"    ; vChar: #220  )
   , ( vName: "&#221;"  ; vChar: #221  )
   , ( vName: "&#222;"   ; vChar: #222  )
   , ( vName: "&#223;"   ; vChar: #223  )
   , ( vName: "&#224;"  ; vChar: #224  )
   , ( vName: "&#225;"  ; vChar: #225  )
   , ( vName: "&#226;"   ; vChar: #226  )
   , ( vName: "&#227;"  ; vChar: #227  )
   , ( vName: "&#228;"    ; vChar: #228  )
   , ( vName: "&#229;"   ; vChar: #229  )
   , ( vName: "&#230;"   ; vChar: #230  )
   , ( vName: "&#231;"  ; vChar: #231  )
   , ( vName: "&#232;"  ; vChar: #232  )
   , ( vName: "&#233;"  ; vChar: #233  )
   , ( vName: "&#234;"   ; vChar: #234  )
   , ( vName: "&#235;"    ; vChar: #235  )
   , ( vName: "&#236;"  ; vChar: #236  )
   , ( vName: "&#237;"  ; vChar: #237  )
   , ( vName: "&#238;"   ; vChar: #238  )
   , ( vName: "&#239;"    ; vChar: #239  )
   , ( vName: "&#240;"     ; vChar: #240  )
   , ( vName: "&#241;"  ; vChar: #241  )
   , ( vName: "&#242;"  ; vChar: #242  )
   , ( vName: "&#243;"  ; vChar: #243  )
   , ( vName: "&#244;"   ; vChar: #244  )
   , ( vName: "&#245;"  ; vChar: #245  )
   , ( vName: "&#246;"    ; vChar: #246  )
   , ( vName: "&#247;"  ; vChar: #247  )
   , ( vName: "&#248;"  ; vChar: #248  )
   , ( vName: "&#249;"  ; vChar: #249  )
   , ( vName: "&#250;"  ; vChar: #250  )
   , ( vName: "&#251;"   ; vChar: #251  )
   , ( vName: "&#252;"    ; vChar: #252  )
   , ( vName: "&#253;"  ; vChar: #253  )
   , ( vName: "&#254;"   ; vChar: #254  )
   , ( vName: "&#255;"    ; vChar: #255  )
   , ( vName: """    ; vChar: #34   )
   , ( vName: "<"      ; vChar: #60   )
   , ( vName: ">"      ; vChar: #62   )
   , ( vName: "&"     ; vChar: #38   )
   , ( vName: "&apos;"    ; vChar: #39   )
   );


 
Style ©   (2007-03-29 10:43) [18]

косяк :)
 const
   HTML_ENTITIES: array [1..102] of THTML_ENTITY = (
     ( vName: " "    ; vChar: #32   )
   , ( vName: "&iexcl;"   ; vChar: #161  )
   , ( vName: "&cent;"    ; vChar: #162  )
   , ( vName: "&pound;"   ; vChar: #163  )
   , ( vName: "&curren;"  ; vChar: #164  )
   , ( vName: "&yen;"     ; vChar: #165  )
   , ( vName: "&brvbar;"  ; vChar: #166  )
   , ( vName: "&sect;"    ; vChar: #167  )
   , ( vName: "&uml;"     ; vChar: #168  )
   , ( vName: "©"    ; vChar: #169  )
   , ( vName: "&ordf;"    ; vChar: #170  )
   , ( vName: "&laquo;"   ; vChar: #171  )
   , ( vName: "&not;"     ; vChar: #172  )
   , ( vName: "&shy;"     ; vChar: #173  )
   , ( vName: "&reg;"     ; vChar: #174  )
   , ( vName: "&macr;"    ; vChar: #175  )
   , ( vName: "&deg;"     ; vChar: #176  )
   , ( vName: "&plusmn;"  ; vChar: #177  )
   , ( vName: "&sup2;"    ; vChar: #178  )
   , ( vName: "&sup3;"    ; vChar: #179  )
   , ( vName: "&acute;"   ; vChar: #180  )
   , ( vName: "&micro;"   ; vChar: #181  )
   , ( vName: "&para;"    ; vChar: #182  )
   , ( vName: "&middot;"  ; vChar: #183  )
   , ( vName: "&cedil;"   ; vChar: #184  )
   , ( vName: "&sup1;"    ; vChar: #185  )
   , ( vName: "&ordm;"    ; vChar: #186  )
   , ( vName: "&raquo;"   ; vChar: #187  )
   , ( vName: "&frac14;"  ; vChar: #188  )
   , ( vName: "&frac12;"  ; vChar: #189  )
   , ( vName: "&frac34;"  ; vChar: #190  )
   , ( vName: "&iquest;"  ; vChar: #191  )
   , ( vName: "&Agrave;"  ; vChar: #192  )
   , ( vName: "&Aacute;"  ; vChar: #193  )
   , ( vName: "&Acirc;"   ; vChar: #194  )
   , ( vName: "&Atilde;"  ; vChar: #195  )
   , ( vName: "&Auml;"    ; vChar: #196  )
   , ( vName: "&Aring;"   ; vChar: #197  )
   , ( vName: "&AElig;"   ; vChar: #198  )
   , ( vName: "&Ccedil;"  ; vChar: #199  )
   , ( vName: "&Egrave;"  ; vChar: #200  )
   , ( vName: "&Eacute;"  ; vChar: #201  )
   , ( vName: "&Ecirc;"   ; vChar: #202  )
   , ( vName: "&Euml;"    ; vChar: #203  )
   , ( vName: "&Igrave;"  ; vChar: #204  )
   , ( vName: "&Iacute;"  ; vChar: #205  )
   , ( vName: "&Icirc;"   ; vChar: #206  )
   , ( vName: "&Iuml;"    ; vChar: #207  )
   , ( vName: "&ETH;"     ; vChar: #208  )
   , ( vName: "&Dstrok;"  ; vChar: #208  ) // для HelpMaker
   , ( vName: "&Ntilde;"  ; vChar: #209  )
   , ( vName: "&Ograve;"  ; vChar: #210  )
   , ( vName: "&Oacute;"  ; vChar: #211  )
   , ( vName: "&Ocirc;"   ; vChar: #212  )
   , ( vName: "&Otilde;"  ; vChar: #213  )
   , ( vName: "&Ouml;"    ; vChar: #214  )
   , ( vName: "&times;"   ; vChar: #215  )
   , ( vName: "&Oslash;"  ; vChar: #216  )
   , ( vName: "&Ugrave;"  ; vChar: #217  )
   , ( vName: "&Uacute;"  ; vChar: #218  )
   , ( vName: "&Ucirc;"   ; vChar: #219  )
   , ( vName: "&Uuml;"    ; vChar: #220  )
   , ( vName: "&Yacute;"  ; vChar: #221  )
   , ( vName: "&THORN;"   ; vChar: #222  )
   , ( vName: "&szlig;"   ; vChar: #223  )
   , ( vName: "&agrave;"  ; vChar: #224  )
   , ( vName: "&aacute;"  ; vChar: #225  )
   , ( vName: "&acirc;"   ; vChar: #226  )
   , ( vName: "&atilde;"  ; vChar: #227  )
   , ( vName: "&auml;"    ; vChar: #228  )
   , ( vName: "&aring;"   ; vChar: #229  )
   , ( vName: "&aelig;"   ; vChar: #230  )
   , ( vName: "&ccedil;"  ; vChar: #231  )
   , ( vName: "&egrave;"  ; vChar: #232  )
   , ( vName: "&eacute;"  ; vChar: #233  )
   , ( vName: "&ecirc;"   ; vChar: #234  )
   , ( vName: "&euml;"    ; vChar: #235  )
   , ( vName: "&igrave;"  ; vChar: #236  )
   , ( vName: "&iacute;"  ; vChar: #237  )
   , ( vName: "&icirc;"   ; vChar: #238  )
   , ( vName: "&iuml;"    ; vChar: #239  )
   , ( vName: "&eth;"     ; vChar: #240  )
   , ( vName: "&ntilde;"  ; vChar: #241  )
   , ( vName: "&ograve;"  ; vChar: #242  )
   , ( vName: "&oacute;"  ; vChar: #243  )
   , ( vName: "&ocirc;"   ; vChar: #244  )
   , ( vName: "&otilde;"  ; vChar: #245  )
   , ( vName: "&ouml;"    ; vChar: #246  )
   , ( vName: "&divide;"  ; vChar: #247  )
   , ( vName: "&oslash;"  ; vChar: #248  )
   , ( vName: "&ugrave;"  ; vChar: #249  )
   , ( vName: "&uacute;"  ; vChar: #250  )
   , ( vName: "&ucirc;"   ; vChar: #251  )
   , ( vName: "&uuml;"    ; vChar: #252  )
   , ( vName: "&yacute;"  ; vChar: #253  )
   , ( vName: "&thorn;"   ; vChar: #254  )
   , ( vName: "&yuml;"    ; vChar: #255  )
   , ( vName: """    ; vChar: #34   )
   , ( vName: "<"      ; vChar: #60   )
   , ( vName: ">"      ; vChar: #62   )
   , ( vName: "&amp;"     ; vChar: #38   )
   , ( vName: "&apos;"    ; vChar: #39   )
   );


 
palva ©   (2007-03-29 23:46) [19]


> 0leg ©   (28.03.07 16:29) [7]
> У меня задача - хранить в XML-файле текст, введенный пользователем
> (содержимое из объектов типа TStrings).
> Если кто этим занимался - посоветуйте, имеет смысл заменять
> все html-
> сущности или можно обойтись стандартным набором (амперсанд,
>  угловые скобки, кавычки) ?
>
> Проблем с отображением в разных браузерах не возникнет?


1. Вот здесь перечислено, какие символы надо заменять в XML файлах.
http://www.w3.org/TR/2000/REC-xml-20001006#syntax
символы & < нужно заменять обязательно, еще три символа > " " лучше тоже заменять, но там сказано, когда такая замена на самом деле необходима.

2. Если браузер старый или плохой и плохо поддерживает XML, то проблемы могут быть в любом случае.


 
Другой ©   (2007-03-30 00:06) [20]

0leg ©   (28.03.07 16:29) [7]
У меня задача - хранить в XML-файле текст, введенный пользователем (содержимое из объектов типа TStrings).


Достаточно такого:

 s:=StringReplace(s,"&","&amp;",[rfReplaceAll, rfIgnoreCase]);
 s:=StringReplace(s,"<","<",[rfReplaceAll, rfIgnoreCase]);
 s:=StringReplace(s,">",">",[rfReplaceAll, rfIgnoreCase]);
 s:=StringReplace(s,""",""",[rfReplaceAll, rfIgnoreCase]);
 result:=s;


ну и обратно.


 
Другой ©   (2007-03-30 00:08) [21]

 s:=StringReplace(s,"&","&_amp;",[rfReplaceAll, rfIgnoreCase]);
 s:=StringReplace(s,"<","&_lt;",[rfReplaceAll, rfIgnoreCase]);
 s:=StringReplace(s,">","&_gt;",[rfReplaceAll, rfIgnoreCase]);
 s:=StringReplace(s,""","&_quot;",[rfReplaceAll, rfIgnoreCase]);
 result:=s;


&_amp; &_lt; &_gt; &_quot; - подчеркивание убрать


 
homm ©   (2007-03-30 00:11) [22]

> &_amp; &_lt; &_gt; &_quot; - подчеркивание убрать

Так что-ли? :)
&amp;amp; &amp;lt; &amp;gt; &amp;quot;


 
Другой ©   (2007-03-30 00:12) [23]

homm ©   (30.03.07 00:11) [22]

:) Да!


 
Style ©   (2007-03-30 08:55) [24]

&amp - проверка :)



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.072 c
1-1172477752
Kav
2007-02-26 11:15
2007.04.22
Delphi 10 и Delphi 7 совместимость


4-1164636280
samael6
2006-11-27 17:04
2007.04.22
Остановка драйвера


8-1154771305
Ильдар
2006-08-05 13:48
2007.04.22
Визуализация на BASS


15-1174896536
umbra
2007-03-26 12:08
2007.04.22
не активируется BDS 2006 trial


3-1170165529
s_t_d
2007-01-30 16:58
2007.04.22
QReport - сохранение отчета(путь и имя файла)?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский