2015-03-27 8 views
0

У меня есть строка, которая содержит правильную одинарную кавычку:Encode ’ быть XML безопасным

$str = "David’s Spade"; 

Я посылаю строку через XML и нужно кодировать. Я прочитал, что я должен кодировать строку, используя htmlspecialchars, но я обнаружил, что запрос XML все еще не работает, тогда как htmlentities работает.

Когда я error_log $ ул:

$str; // David\xe2\x80\x99s Spade 
htmlspecialchars($str); // David\xe2\x80\x99s Spade 
htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); // David\xe2\x80\x99s Spade 
htmlentities($str); // David’s Spade 

было бы лучше str_replace ’, а затем использовать htmlentities? Есть ли другие недостатки, которые могут пропустить?

+2

Вам не нужно кодировать одиночную кавычку для XML. Возможно, вам следует расширить, как вы собираетесь использовать $ str (содержимое или атрибут тега) и как вы собираетесь отправлять XML. Вы можете проверить, действительно ли ваш XML: http://www.w3schools.com/xml/xml_validator.asp – user1498339

ответ

1

Я отправляю строку через XML и должен ее кодировать.

Нет, вы этого не сделаете. Если XML кодируется в кодировке UTF-8 (по умолчанию), а ваш $str кодируется в кодировке UTF-8 (как показано в двоичных последовательностях в вашем вопросе), его не нужно кодировать.

Это книга. Поэтому, учитывая техническую информацию о данных, с которыми вы сотрудничаете, это ясно и понятно.

Затем вы пишете, что некоторые вещи работают, а другие - нет. Независимо от того, что вы там делаете, проблема кроется в том, что вы скрываете от своего вопроса.

Чтобы сделать это более четко:

$str = "David’s Spade"; // "David\xE2\x80\x99s Spade" 

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

$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><doc/>'); 
$xml->element = $str; 
$xml->asXML('php://output'); 

Выходной :

<?xml version="1.0" encoding="UTF-8"?> 
<doc><element>David’s Spade</element></doc> 

Как вы можете видеть, XML был закодирован, не изменяя байтовую последовательность e string здесь, потому что это UTF-8.

Давайте возьмем некоторые ASCII:

$xml = new SimpleXMLElement('<doc/>'); 
$xml->element = $str; 
$xml->asXML('php://output'); 

Выход:

<?xml version="1.0"?> 
<doc><element>David&#x2019;s Spade</element></doc> 

Как показывает этот пример, это зависит от кодировки документа затем. Этот второй пример - отказ от Simplexml, чтобы сделать вывод более надежным, но на самом деле это не было бы необходимо, поскольку UTF-8 будет кодировкой по умолчанию.

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

 Смежные вопросы

  • Нет связанных вопросов^_^