Лучший кодер HTML для Delphi?

Кажется, что мои данные становятся поврежденными при использовании 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 (), который используется в настоящее время.

5
задан wfoster 24 June 2010 в 16:36
поделиться

3 ответа

Замена символов <,>, & и "в строке тривиальна. Таким образом, вы можете легко написать ваша собственная процедура для этого. (И если ваша HTML-страница - UTF-8, нет абсолютно никаких причин для кодирования каких-либо других символов, таких как U + 222B (знак интеграла).)

Но если вы хотите придерживаться Delphi RTL, тогда вы можете взглянуть на HTTPUtil.HTMLEscape с той же подписью, что и HTTPApp.HTMLEncode.

Или посмотрите этот вопрос SO .

5
ответ дан 13 December 2019 в 19:21
поделиться

Небольшая подсказка: не преобразуйте одинарную кавычку (') в ' - некоторые браузеры не понимают этот код, потому что ' не является валидным HTML

Подробнее см: "Проклятие '" и "XHTML и '"

(Оба упомянутых модуля Delphi не преобразуют одинарные кавычки).

3
ответ дан 13 December 2019 в 19:21
поделиться

Вероятно, вы используете Delphi 2009 или 2010. Мне кажется, что они забыли обновить HTMLEncode для Unicode. Он передает неправильную длину буфера в FormatBuf.

Процедура HTMLEncode в основном правильная, не считая этого, и она довольно короткая. Вы, вероятно, можете просто сделать свою собственную копию. Везде, где она вызывает FormatBuf, она дает 5 параметров. Второй и четвертый - целочисленные значения. Удвойте оба из них в каждом вызове (их всего четыре), и тогда все будет работать.

Также вам следует открыть QC отчет об этом, чтобы это было исправлено.

3
ответ дан 13 December 2019 в 19:21
поделиться
Другие вопросы по тегам:

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