Умное HTML кодирование - PullRequest
       8

Умное HTML кодирование

3 голосов
/ 04 августа 2009

Я ищу лучший способ сделать что-то вроде "умного" кодирования HTML. Например:

From: <a>Next >></a> to: <a>Next gt;gt;</a>
From: <p><a><b><< Prev</b></a><br/><a>Next >></a></p> to: <p><a><b>&lt;&lt; Prev</b></a><br/><a>Next gt;gt;</a></p>

Таким образом, только часть текста, отличная от XML / HTML, будет закодирована, как если бы вызывался HtmlEncode.

Есть предложения?

РЕДАКТИРОВАТЬ: это должно быть как можно легче. Входящий текст будет приходить от пользователей, которые не знают о кодировке HTML.

Ответы [ 5 ]

6 голосов
/ 04 августа 2009

Да: не никогда впишите HTML в ваш исходный код. Вместо этого работайте с таким API, как DOM, который позаботится обо всех проблемах кодирования.

2 голосов
/ 04 августа 2009

Если вам нужно надежное и полностью надежное решение C # (но тяжелое), я бы использовал библиотеку HTML Agility Pack . Затем вы можете перебирать узлы и HTML кодировать содержимое. Это немного более пуленепробиваемо, чем регулярные выражения, но, очевидно, более интенсивно.

Если вы хотите сделать это на стороне клиента, используйте JQuery. См. Кодирование сущностей HTML с помощью jQuery .

.
0 голосов
/ 04 августа 2009

Думали ли вы об использовании tidy.net? Вы можете добавить свой пользовательский вклад в это и посмотреть, что он получится, это очень, очень, очень хорошо, и превратить мусор в то, что вы действительно хотите. Я полагаю, что это DLL и весь управляемый код, так что вы легко можете ее использовать.

Что касается группы regexp, я не согласен. Если данные ограничены (вы не говорите, если это так или нет), то вы могли бы придумать некоторые правила, по крайней мере, для проверки вашей входной строки, если не очистить ее. Я подозреваю, что ваши данные могут быть буквально чем угодно, и в этом случае вам лучше использовать что-то другое, но это не должно быть полностью исключено.

0 голосов
/ 04 августа 2009

Вы, вероятно, пытаетесь решить не ту проблему. (Я знаю, что это не то, что вы хотите услышать.)

Если пользователям разрешено писать незашифрованные >> и << в HTML, то, вероятно, они также смогут писать <> или <b>, и в этом случае вы не сможете надежно отличить текст и разметка. (Не берите в голову, что это делает вас уязвимым для атак XSS.)

Вы действительно должны перехватить текст и закодировать его до того, как будет интерполирован в HTML. Вероятно, вы должны объяснить рабочий процесс, приводящий к вашей проблеме. Должен быть лучший способ ее решить.

Редактировать в ответ на комментарий: просто невозможно надежно кодировать ввод, который может быть одновременно текстом или HTML. В любом случае, если пользователи достаточно технически, чтобы вводить необработанный HTML, предположительно, они могут писать сущности - в противном случае не следует вводить необработанный HTML. Если ввод HTML предназначен только для опытных пользователей, то у вас может быть флажок, который указывает, является ли ввод текстовым или HTML. Но вам, вероятно, стоит изучить использование текстового редактора.

0 голосов
/ 04 августа 2009

Возможно, я бы попытался написать хорошее регулярное выражение для этого. Вы делаете это в коде (C #) или на стороне клиента с JavaScript?

http://www.regular -expressions.info /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...