Кажется, что мои данные становятся поврежденными при использовании HTTPapp. HTMLEncode (строка): Строка;
HTMLEncode( 'Jo&hn D
Это не корректно, и повреждает мои данные. У кого-либо есть предложения для компонентов VCL той работой лучше? Кроме пребывания в течение моего времени, кодируя все случаи
http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references
После понимания больше о HTML, я нашел, что нет никакой потребности закодировать другие символы, на которые ссылаются в моей ссылке. Необходимо было бы только знать о четырех HTML зарезервированных символах тех, чтобы быть
&,<,>,"
Проблема с HTTPApp VCL. HTMLEncode () функция является из-за размера буфера и нового Delphi 2009/2010 спецификациями для строковых типов Unicode по умолчанию, это может быть зафиксировано способ, которым @mason говорит ниже, или это может быть прикреплено с вызовом к WideFormatBuf () вместо FormatBuf (), который используется в настоящее время.
Замена символов <,>, & и "в строке тривиальна. Таким образом, вы можете легко написать ваша собственная процедура для этого. (И если ваша HTML-страница - UTF-8, нет абсолютно никаких причин для кодирования каких-либо других символов, таких как U + 222B (знак интеграла).)
Но если вы хотите придерживаться Delphi RTL, тогда вы можете взглянуть на HTTPUtil.HTMLEscape с той же подписью, что и HTTPApp.HTMLEncode.
Или посмотрите этот вопрос SO .
Небольшая подсказка: не преобразуйте одинарную кавычку (') в '
- некоторые браузеры не понимают этот код, потому что '
не является валидным HTML
Подробнее см: "Проклятие '
" и "XHTML и '"
(Оба упомянутых модуля Delphi не преобразуют одинарные кавычки).
Вероятно, вы используете Delphi 2009 или 2010. Мне кажется, что они забыли обновить HTMLEncode для Unicode. Он передает неправильную длину буфера в FormatBuf.
Процедура HTMLEncode в основном правильная, не считая этого, и она довольно короткая. Вы, вероятно, можете просто сделать свою собственную копию. Везде, где она вызывает FormatBuf, она дает 5 параметров. Второй и четвертый - целочисленные значения. Удвойте оба из них в каждом вызове (их всего четыре), и тогда все будет работать.
Также вам следует открыть QC отчет об этом, чтобы это было исправлено.