Я отправляю строку через 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’s Spade</element></doc>
Как показывает этот пример, это зависит от кодировки документа затем. Этот второй пример - отказ от Simplexml, чтобы сделать вывод более надежным, но на самом деле это не было бы необходимо, поскольку UTF-8 будет кодировкой по умолчанию.
В любом случае вы не должны слишком беспокоиться о кодировании, используя библиотеку, специализирующуюся на создании XML-документов. Для этого PHP имеет несколько. Возьмите одного из них.
Вам не нужно кодировать одиночную кавычку для XML. Возможно, вам следует расширить, как вы собираетесь использовать $ str (содержимое или атрибут тега) и как вы собираетесь отправлять XML. Вы можете проверить, действительно ли ваш XML: http://www.w3schools.com/xml/xml_validator.asp – user1498339