Какие символы мне нужно экранировать в документах xml?

Встроенные простые типы

Дата и время

  • dateTime
    содержит дату и время в формате CCYY-MM-DThh:mm:ss
  • duration
    — представляет временную длительность, которая выражена компонентами григорианских дней, часов, минут и секунд.

Например: запись P1Y2M3DT10H30M45S
означает один год (1Y), два месяца (2M), три дня (3DT), десять часов (10H), тридцать минут (30M) и 45 секунд (45S).

Запись может быть сокращенной P120M означает 120 месяцев, а Т120М — 120 минут.

  • time
    содержит время в обычном формате hh:mm:ss
  • date
    содержит дату в формате CCYY-MM-DD
  • gYearMonth
    выделяет год и месяц в формате CCYY-MM
  • gYear
    означает год в формате CCYY
  • gMonthDay
    содержит месяц и день в формате MM-DD
  • gDay
    день месяца в формате DD
  • gMonth
    месяц в формате ММ

Строки символьные

string
— основной символьный тип.

Строка символов в виде последовательности символов Unicode , включая символы пробела, табуляции, возврата каретки и перевода строки.

  • normalizedString
    — подтип типа — это строки, не содержащие символов перевода строки «\n», возврат каретки «\r» и горизонтальной табуляции «\t».
    • token
      — подтип типа normalizedString- нет, кроме того начальных и завершающих пробелов и несколько подряд идущих пробелов.
      • language
        — подтип token, определен для записи названия языка согласно рекомендации RFC 1766 , например, ru, en, de, fr.
      • NMTOKEN
        — подтип token, используется только в атрибутах для записи их перечисляемых значений.
      • Name
        — подтип token, составляют имена XML — последовательности букв, цифр, дефисов, точек, двоеточий, знаков подчеркивания, начинающиеся с буквы (кроме зарезервированной последовательности букв X, x, M, m, L, l
        в любом сочетании регистров) или знака подчеркивания. Имена, начинающиеся со строки, xml

        NCName
        — подтип name, не содержащий двоеточие. Определены три подтипа: ID, IDREF, ENTITY

        , используются самой спецификацией XML.

Двоичные типы

  • boolen
    — двоичное, логическое. Принимает значения: True или False (1 или 0)
  • base64Binary
    — двоичные целые числа в кодировке Base64
  • hexBinary
    — двоичные целые числа в шестнадцатеричной форме без всяких дополнительных символов

Вещественные числа

  • decimal
    составляют вещественные числа, записанные с фиксированной точкой: 123.45, -0.48747798 и т.д.
  • double
    и float
    типы соответствуют стандарту IEEE754-85, записываются с фиксированной или плавающей точкой.

Целые числа

  • integer
    — основной целый тип, содержащий числа с нулевым порядком, понимается как подтип decimal
  • number
    — определяет число (без ограничений на количество цифр); может содержать знак, дроби, а также показатель степени. Значения изменяются

от 1.7976931348623157Е+308 до 2.2250738585072014Е-308

Есть ли escape-символ для двойной кавычки в xml? Я хочу написать тег вроде:

но если я поставлю «, то это означает, что строка закончилась. Мне нужно что-то вроде этого (c ++):

Printf(«Quote = \» «);

Есть ли символ, который нужно написать перед двойной цитатой, чтобы избежать его?

Новый, улучшенный ответ на старый, часто задаваемый вопрос…

9 ответов

Лучший ответ

Если вы используете соответствующий класс или библиотеку, они сделают экранирование за вас. Многие проблемы XML вызваны объединением строк.

Escape-символы XML

Их всего пять:

Экранирование символов зависит от того, где используется специальный символ.

Примеры можно проверить в .

Атрибуты

Безопасный способ — экранировать все пять символов в атрибутах. Однако символ в атрибутах экранировать не нужно:

Символ не нужно экранировать в атрибутах, если кавычки имеют вид :

Аналогично, не нужно экранировать в атрибутах, если кавычки имеют вид :

XML против HTML

HTML имеет собственный набор управляющих кодов, охватывающий гораздо больше символов.

1439

Peter Mortensen
26 Янв
2020 в 13:53

Согласно спецификациям Консорциума World Wide Web (w3C), , за исключением случаев, когда они используются в качестве разделителей разметки или внутри комментария, инструкции обработки или раздела CDATA. Во всех остальных случаях эти символы должны быть заменены либо на соответствующий объект, либо на числовую ссылку в соответствии со следующей таблицей:

Исходный символ Замена объекта XML Числовая замена XML & lt; & # 60; > & gt; & # 62; " & quot; & # 34; & & amp; & # 38; ' & apos; & # 39;

Обратите внимание, что вышеупомянутые объекты могут использоваться также в HTML, за исключением & apos; , который был введен с XHTML 1.0 и не объявлен в HTML 4. По этой причине и для обеспечения ретро-совместимости , вместо

76

Albz
3 Июл 2013 в 12:38

Для тегов и атрибутов экранирующие символы различаются.

Для тегов:

Для атрибутов:

Из :

54

Peter Mortensen
17 Дек 2019 в 19:07

В дополнение к общеизвестным пяти символам , я бы также избегал символа вертикальной табуляции (0x0B). Это допустимый UTF-8, но не действительный XML 1.0 и даже многие библиотеки. (включая высокопортативную (ANSI C) библиотеку libxml2) пропускают его и выводят неверный XML без уведомления.

27

Peter Mortensen
26 Янв 2020 в 13:54

Источник сокращения:

Есть пять предопределенных сущностей:

«Все разрешенные символы Unicode могут быть представлены с помощью числовой ссылки на символы». Например:

Большинство управляющих символов и других диапазонов Unicode специально исключены, что означает (я думаю), что они не могут появляться ни в экранировании, ни в прямом:

13

Peter Mortensen
17 Дек 2019 в 19:03

Это зависит от контекста. Для содержания это и & , а также hibitedune> (хотя строка из трех вместо одного символа).

Для значений атрибутов это , & , » и ‘.

Для CDATA — это sizes explicitly> .

4

Peter Mortensen
17 Дек 2019 в 19:05

Принятый ответ неверен. Лучше всего использовать библиотеку для экранирования xml.

Как упоминалось в этом другом вопросе

«В основном, управляющие символы и символы вне диапазонов Unicode не допускаются. Это также означает, что вызов, например, символьной сущности запрещен».

Если вы избежите только пяти символов. У вас могут быть такие проблемы, как ​​Обнаружен недопустимый символ XML (Unicode: 0xc)

1

Gabriel Furstenheim
29 Янв 2021 в 14:35

Только и требуется экранировать, если они обрабатываются символьными данными, а не разметкой:

-10

Peter Mortensen
26 Янв 2020 в 14:00

Возможно, это поможет:

Список ссылок на символьные сущности XML и HTML :

В этой статье перечислены следующие пять предопределенных XML-сущностей:

95

Ry-
7 Июн 2012 в 18:33

Как PHP находит переменную в строке?

Всё просто. Помните, какие символы могут использоваться в названии переменной? Это цифры, буквы и подчёркивание _ .

Вот PHP и принимает за название всё, что находится между символом $ и первым запрещённым символом.

В следующем коде PHP неправильно определит название переменной и выдаст ошибку:

Результат в браузере:

Чтобы PHP правильно определил название переменной в строке, нужно поместить её в фигурные скобки <> :

Результат в браузере:

Нет однозначного мнения, какие кавычки нужно использовать для обычных строк, в которые ничего не нужно подставлять. Однако, многие программисты предпочитают использовать одинарные кавычки.

Дело в том, что двойные кавычки у многих вызывают ассоциацию «в эту строку что-то должно подставляться». Поэтому я рекомендую использовать одинарные кавычки для обычного текста, а двойные – только когда в текст нужно подставить переменную. Пример:

Что такое экранирование кавычек

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

Практически в любом языке программирования мы используем следующий принцип объявления строковой переменной:

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

Если нам нужно передать в строковую переменную текст содержащий кавычки и мы попытаемся сделать это таким образом:

то произойдет ошибка, поскольку вместо одной строки интерпретатор увидит две:

а между ними неизвестный ему оператор – lifeexample.ru .

Чтобы такого не происходило необходимо экранировать кавычки. В javascript, например, это будет выглядеть таким образом:

После данного практического примера можно дать определение понятию экранирования кавычек.

Экранирование кавычек – это действие, совершаемое над строковой переменной в ходе работы скрипта. Действие это позволяет использовать кавычки в строке. Частным но довольно распространенным способом экранирования является подстановка обратного слеша перед внутренними кавычками.

Атрибуты

АÃÂøñÃÂÃÂàÿÃÂõôþÃÂÃÂðòûÃÂÃÂàôþÿþûýøÃÂõûÃÂýÃÂàøýÃÂþÃÂüðÃÂøàþñ ÃÂûõüõýÃÂðÃÂ, úþÃÂþÃÂðàýõ ÃÂòûÃÂõÃÂÃÂàÃÂðÃÂÃÂÃÂàôðýýÃÂÃÂ.

àÿÃÂøòõôõýýþü ýøöõ ÿÃÂøüõÃÂõ, ÃÂøÿ ÃÂðùûð ýõ øüõõàþÃÂýþÃÂõýøàú ôðýýÃÂü, ýþ òðöõý ôûàÿÃÂþóÃÂðüüýþóþ þñõÃÂÿõÃÂõýøÃÂ, úþÃÂþÃÂþõ üþöõàüðýøÿÃÂûøÃÂþòðÃÂàÃÂûõüõýÃÂþü:

computer.gif

ÃÂýðÃÂõýøàðÃÂÃÂøñÃÂÃÂþò òÃÂõóôð ôþûöýàñÃÂÃÂàò úðòÃÂÃÂúðÃÂ. ÃÂøñþ þôøýðÃÂýÃÂõ øûø ôòþùýÃÂõ úðòÃÂÃÂúø üþóÃÂàñÃÂÃÂàøÃÂÿþûÃÂ÷þòðýÃÂ.
ÃÂÃÂøüõÃÂ: ôûàþÿÃÂõôõûõýøàÿþûð ÃÂõûþòõúð, ÃÂûõüõýàüþöõàñÃÂÃÂà÷ðÿøÃÂðý ÃÂðú:

ÃÂÃÂûø ÷ýðÃÂõýøõ ðÃÂÃÂøñÃÂÃÂð ÃÂðüþ ÃÂþôõÃÂöøàôòþùýÃÂõ úðòÃÂÃÂúø üþöýþ øÃÂÿþûÃÂ÷þòðÃÂàþôøýðÃÂýÃÂõ úðòÃÂÃÂúø, úðú ò ÃÂÃÂþü ÿÃÂøüõÃÂõ:

øûø òàüþöõÃÂõ øÃÂÿþûÃÂ÷þòðÃÂàÃÂøüòþûÃÂýÃÂõ þñÃÂõúÃÂÃÂ: & quot; & quot;

ÃÂõÃÂúþûÃÂúþ ÿÃÂøüõÃÂþò øÃÂÿþûÃÂ÷þòðýøàÃÂøÿð ôðýýÃÂàÃÂðÃÂð

ÃÂðÃÂð úðú ðÃÂÃÂøñÃÂÃÂ

ToveJaniReminder
Don»t forget me this weekend!

ÃÂðÃÂð úðú ÃÂûõüõýÃÂ

10/01/2008ToveJaniReminder
Don»t forget me this weekend!

ÃÂðÃÂð úðú ÃÂûõüõýàÃÂðÃÂÃÂøÃÂõýýÃÂù

10012008ToveJaniReminder
Don»t forget me this weekend!

ÃÂÃÂÃÂøñÃÂÃÂàüõÃÂðôðýýÃÂÃÂ

íÃÂø øôõýÃÂøÃÂøúðÃÂþÃÂàüþóÃÂàñÃÂÃÂàøÃÂÿþûÃÂ÷þòðýàôûàþÿÃÂõôõûõýøàXML-ÃÂûõüõýÃÂþò.

ÃÂÃÂøüõÃÂ:

ToveJaniReminder
Don»t forget me this weekend!
JaniToveRe: Reminder
I will not

ÃÂðýýÃÂõ þ ôðýýÃÂÃÂ, ôþûöýàñÃÂÃÂàÃÂþÃÂÃÂðýõýàò òøôõ ðÃÂÃÂøñÃÂÃÂþò, ð ÃÂðüø ôðýýÃÂõ ôþûöýàÃÂÃÂðýøÃÂÃÂÃÂàò úðÃÂõÃÂÃÂòõ ÃÂûõüõýÃÂþò.

Тройные кавычки

Обозначение строк, содержащих одинарные и двойные кавычки

Мы можем использовать тройные кавычки (то есть три одинарные кавычки или три двойные кавычки) для представления строк с одинарными и двойными кавычками, чтобы исключить необходимость экранирования любых кавычек.

>>> print('''She said, "Thank you! It's mine."''')
She said, "Thank you! It's mine."

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

Например, для строки в приведенном выше коде использование тройных двойных кавычек приведет к синтаксической ошибке. Поэтому необходимо использовать тройные одинарные кавычки.

>>> print("""She said, "Thank you! It's mine."""")
  File "<stdin>", line 1
    print("""She said, "Thank you! It's mine."""")
                                                 ^
SyntaxError: EOL while scanning string literal

Многострочные строки

Также тройные кавычки используются для представления многострочной строки. Пример:

>>> print("""Hello
... World
... !""")
Hello
World
!

Этого же можно добиться, используя символ n для создания многострочных строк. Но это затрудняет чтение строки. А использование тройных кавычек позволяет записать строку так, как она есть.

>>> def multiple_line_comment(a, b):
...     '''
...     a is a string # other additional description
...     b is a list of integers # other additional description
...     '''
...     pass
... 
>>> print(multiple_line_comment.__doc__)

    a is a string # other additional description
    b is a list of integers # other additional description

Мы сразу видим, что является многострочным комментарием для функции.

Сущности символов XML

Как упоминалось ранее, большинство сущностей символов и escape-последовательностей, которые обычно используются для написания разметки XAML, определяются XML. Этот раздел не содержит полного списка этих сущностей. Подробные сведения о них можно найти во внешней документации, например в спецификациях XML. Однако для удобства в этом разделе перечислены некоторые из определенных сущностей символов XML, которые обычно используются в разметке XAML.

Знак
Сущность
Примечания
& (амперсанд)
&
Должен использоваться для значений атрибутов и содержимого элемента.
> (символ «больше»)
>
Должен использоваться для значения атрибута, но > приемлемо в качестве содержимого элемента, пока не за ним.
«(прямая кавычка)
»
Должен использоваться для значения атрибута, но прямая кавычка («) допустима в качестве содержимого элемента

Обратите внимание, что значения атрибутов могут быть заключены в прямые одиночные кавычки (‘) или прямые двойные кавычки («»). Первый символ определяет оболочку значения атрибута, а альтернативный знак кавычек можно затем использовать в качестве литерала в значении.
‘ (одиночная прямая кавычка)

Должен использоваться для значения атрибута, но прямая одиночная кавычка (‘) допустима в качестве содержимого элемента

Обратите внимание, что значения атрибутов могут быть заключены в прямые одиночные кавычки (‘) или прямые двойные кавычки («»). Первый символ определяет оболочку значения атрибута, а альтернативный знак кавычек можно затем использовать в качестве литерала в значении.
(сопоставления цифровых символов)
; или ;
XAML поддерживает сопоставления числовых символов с активной кодировкой.
(неразрывный пробел)
  (предполагается кодировка UTF-8)
Для элементов потокового документа или элементы, которые принимают текст, например TextBox в WPF, неразрывные пробелы не нормализуются в разметке даже для . (Дополнительные сведения см. в разделе Обработка пробелов в XAML.)

Зачем может понадобиться экранирование кавычек в PHP

Помимо разобранного примера с выводом строк, экранирование кавычек и других спец символов зачастую необходимо при работе с БД.

Чтобы не допустить, различного рода проблем при работе с базой данных, перед сохранением данных в таблицы можно использовать функцию addslashes

Обе эти функции являются стандартными в php и экранируют спецсимволы строк. Когда и какую использовать, зависит от конкретных задач. Например addslashes лучше использовать для сериализованной строки при записи ее в базу, а mysql_real_escape_string для всех пользовательских данных пришедших с формы на сайте.

В небольших web-приложениях, можно не использовать ручное экранирование addslashes или mysql_real_escape_string если включить «Магические кавычки» — magic_quotes_gpc

Зачастую магические кавычки включены по умолчанию на сервере, это можно узнать из информацией полученной при выполнении функции

С помощью XML придумывайте собственные теги

Для создании тегов (дескрипторов, элементов) стандартного формата не существует.

Язык XML не имеет предопределенных тегов.

  • XML позволяет автору определить его собственные теги и его собственную структуру документа.
  • XML используется для передачи данных
  • XML представляет собой программно-аппаратно независимый инструмент для переноса информации.
  • XML, теперь так же важен для сети как HTML
  • XML является наиболее распространенным инструментом для передачи данных между разными приложениями
  • XML используется во многих аспектах веб-разработки, часто для упрощения хранения данных и обмена ими
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: