Преобразование строки UTF-8 в / из 7-битного XML в PHP

Как можно преобразовать строки UTF-8 (т. Е. 8-битную строку) в / из XML-совместимых 7-битных строк (т. Е. Печатаемых ASCII с числовыми объектами)?

то есть функция encode() такая, что:

encode("“£”") -> "“£”"

decode() также будет полезен:

decode("“£”") -> "“£”"

Пара PHP htmlenties() / html_entity_decode() не работает правильно:

htmlentities(html_entity_decode("“£”")) ->
  "“£”"

Тщательное указание типов немного помогает, но все же возвращает именованные сущности, несовместимые с XML, а не числовые:

htmlentities(html_entity_decode("“£”", ENT_QUOTES, "UTF-8"), ENT_QUOTES, "UTF-8") ->
  "“£”"
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
5 318
2

Ответы 2

Это своего рода обходной путь, но я немного читал о iconv() и не думаю, что он даст вам числовые объекты (не проверяемые)

function decode( $string )
{
  $doc = new DOMDocument( "1.0", "UTF-8" ); 
  $doc->LoadXML( '<?xml version = "1.0" encoding = "UTF-8"?>'."\n".'<x />', LIBXML_NOENT );
  $doc->documentElement->appendChild( $doc->createTextNode( $string ) );
  $output = $doc->saveXML( $doc );
  $output = preg_replace( '/<\?([^>]+)\?>/', '', $output ); 
  $output = str_replace( array( '<x>', '</x>' ), array( '', '' ), $output );
  return trim( $output );
}

Однако я испытал это на практике. Я мог бы сделать обратное позже, только не задерживайте дыхание ;-)

mb_encode_numericentity делает именно это.

круто, я этого еще не знала :)

Kris 13.10.2008 06:54

Я думаю, что mb_encode_numericentity поступит правильно, но найти правильные аргументы сложно. (Похоже, что самая сложная часть - это сохранение (т.е. не преобразование) печатаемых символов ASCII и знаков препинания. (Например, «&» нужно заменить на «& amp;», а «^» можно оставить как есть).

mjs 27.02.2009 22:13

Другие вопросы по теме