utf-8 и htmlentities в каналах RSS

Если вы хотите выбрать только несколько полей из сложного JSON, вы можете использовать Cinchoo ETL - библиотеку с открытым исходным кодом

В приведенном ниже примере показано, как выбрать RollId и [112 ] значения из вашего json

using (var r = new ChoJSONReader("## YOUR JSON FILE PATH ##")
    .WithJSONPath("$.._data")
    .WithField("RollId", jsonPath: "$..Id.RollId", fieldType: typeof(string))
    .WithField("MType", jsonPath: "$..Data.MType", fieldType: typeof(string))
    )

{
    foreach (var rec in r)
    {
        Console.WriteLine((string)rec.RollId);
        Console.WriteLine((string)rec.MType);
    }
}

Надеюсь, это поможет.

9
задан SoapBox 21 November 2008 в 02:17
поделиться

6 ответов

Важно передать набор символов функции htmlentities, поскольку значение по умолчанию является ISO-8859-1:

utf8_encode(htmlentities($source,ENT_COMPAT,'utf-8'));

Необходимо применить htmlentities сначала, чтобы позволить utf8_encode кодировать объекты правильно.

(РЕДАКТИРОВАНИЕ: Я изменился от своего мнения прежде, которое порядок не имел значения на основе комментариев. Этот код тестируется и работает хорошо).

17
ответ дан 4 December 2019 в 06:17
поделиться

Во-первых: utf8_encode функция преобразовывает от ISO 8859-1 до UTF-8. Таким образом, Вам только нужна эта функция, если Вашим входным кодированием/набором символов является ISO 8859-1. Но почему Вы не используете UTF-8 во-первых?

Во-вторых: Вам не нужно htmlentities. Вам просто нужно htmlspecialchars заменять специальные символы символьными ссылками. htmlentities заменил бы “слишком много” символы, которые могут быть закодированы непосредственно с помощью UTF-8. Важный то, что Вы используете ENT_QUOTES заключите стиль в кавычки для замены одинарных кавычек также.

Так мое предложение:

// if your input encoding is ISO 8859-1
htmlspecialchars(utf8_encode($string), ENT_QUOTES)

// if your input encoding is UTF-8
htmlspecialchars($string, ENT_QUOTES, 'UTF-8')
14
ответ дан 4 December 2019 в 06:17
поделиться

Могло бы быть легче забыть htmlentities и использовать раздел CDATA. Это работает на раздел заголовка, который не кажется, что поддержка закодировала символы HTML в средстве просмотра RSS Firefox:

<title><![CDATA[News & Updates  " > » ☂ ☺ ☹ ☃  Test!]]></title>
2
ответ дан 4 December 2019 в 06:17
поделиться

Не использовать htmlentities()!

Просто используйте символы UTF-8. Просто удостоверьтесь, что Вы объявляете кодирование канала в HTTP-заголовках (Content-Type:application/xml;charset=UTF-8) или сбой этого, в самом канале с помощью <?xml version="1.0" encoding="UTF-8"?> на первой строке.

7
ответ дан 4 December 2019 в 06:17
поделиться

Вы хотите сделать $output = htmlentities(utf8_encode($source));. Это вызвано тем, что Вы хотите преобразовать свои международные символы в надлежащий UTF8 сначала и затем иметь амперсанды (и возможно некоторые символы UTF-8 также) возвращенный к объектам HTML. Если Вы делаете объекты сначала, то некоторые международные символы не могут быть обработаны правильно.

Если ни один из Ваших международных символов не будет измененным utf8_encode, то он не имеет значения, какой порядок Вы призываете их.

1
ответ дан 4 December 2019 в 06:17
поделиться

После долгих проб и ошибок я наконец нашел способ правильно отображать строку из значения базы данных в кодировке utf8 через файл xml на странице html:

$output = '<![CDATA['.utf8_encode(htmlentities($string)).']]>';

Надеюсь, это кому-то помогает.

0
ответ дан 4 December 2019 в 06:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: