Если я создаю XML и использую <![CDATA[...]]>
, как мне кодировать данные, которые могут включать подстроку ]]>
? это будет ]]>
? Я спрашиваю, потому что всегда думал, что содержимое CDATA — это буквальное содержимое.
кодировать ]]› в cdata
Ответы (4)
Это не очень эффективно, или легко читается, или что-то в этом роде, но появляется подход к этому чтобы писать..
]]]]><![CDATA[>
вы можете просто использовать два тега cdata, первый из которых содержит ]] а второй содержит >
CDATA в некотором смысле является буквальным содержимым, но, конечно, должен быть какой-то способ отметить конец блока CDATA, и все, что вы выберете, должно быть каким-то образом представлено в вашей строке.
Когда мне пришлось иметь дело с XML-документами, содержащими CDATA внутри другого блока CDATA, как и вам, я сдался и закодировал все это как Base64. Затем другая сторона извлекает текст и декодирует его.
Base64 удобен, потому что он имеет общую поддержку и/или простые алгоритмы для кодирования и декодирования строк ASCII в него на многих языках, в моем случае C# и Javascript в приложении ASP.NET.
Разве сущности не должны работать?
вот так: >
или только один из них: ]]>
93 для latin1, вам понадобятся объекты unicode при отправке данных в utf-8.
В качестве примечания, есть и другие символы, которые также запрещены в блоке CDATA, некоторые странные кавычки и символы управления потоком.