Как очистить поле формы для атрибута 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="•"><![CDATA[ • ]]> </foo>
любой валидатор будет жаловаться на быка не быть сущностью в атрибуте. Если вы удалите атрибут, он будет действителен. Также я слышал, что схемы-это путь, поэтому, если что-то подобное выше возможно, но вместо этого использует схему XML, это было бы потрясающе.
спасибо!
2 ответов
Это верно
<?xml version="1.0" ?>
<!DOCTYPE foo [
<!ELEMENT foo EMPTY>
<!ATTLIST foo a CDATA #REQUIRED>
]>
<foo a="&bull;"><![CDATA[ • ]]> </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) . ']]>"