Как очистить поле формы для атрибута XML, который будет содержать допустимые символы UTF8?

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

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

обновление:
Я нашел:http://en.wikipedia.org/wiki/CDATA#CDATA-type_attribute_value, который указал мне, что я могу описать атрибут как раздел CDATA с использованием DTD; однако это не так.

<?xml version="1.0" ?> 
<!DOCTYPE foo [
  <!ELEMENT foo EMPTY>
  <!ATTLIST foo a CDATA #REQUIRED>
]>
<foo a="&bull;"><![CDATA[ &bull; ]]> </foo>

любой валидатор будет жаловаться на быка не быть сущностью в атрибуте. Если вы удалите атрибут, он будет действителен. Также я слышал, что схемы-это путь, поэтому, если что-то подобное выше возможно, но вместо этого использует схему XML, это было бы потрясающе.

спасибо!

2 ответов


Это верно

<?xml version="1.0" ?> 
<!DOCTYPE foo [
  <!ELEMENT foo EMPTY>
  <!ATTLIST foo a CDATA #REQUIRED>
]>
<foo a="&amp;bull;"><![CDATA[ &bull; ]]> </foo>

вы можете перевести специальные символы в HTML-сущности с

htmlentities($str);

и повернув с

html_entity_decode($str);

см.:http://www.php.net/manual/en/function.htmlentities.php

см. также "html metacharacters"


все, что вам нужно сделать, это обернуть их в <!CDATA[ ]]> теги. Вы можете бросить в htmlentities тоже.

attr="<!CDATA[' . htmlentities($value) . ']]>"