2015-03-26 1 views
1

У меня возникла проблема. Я использую синтаксический анализатор bbcode для HTML, и когда я пытаюсь его проанализировать, у меня есть некоторые проблемы, когда у меня есть теги, которых нет в моем наборе парсера.Удалите некоторые bb-коды из кода

Например: Разрешение для моего парсера [b], [center] и [i] теги. Если я попытаюсь разобрать [u] или [color={anyColor}] теги, это возвращает мне исключение.

Я хочу удалить другие теги, которые не разрешены.

Сначала я подумал о том, не позволяя ему на моем текстовое поле, но, когда я использую Ctrl + с/v, чтобы заполнить текстовое поле он заполняет с этими тегами и я замечаю, когда данные уже на моя база данных.

То, что я подумал:

  1. Пользователь введите строку с неправильными метками
  2. Я называю любой метод для удаления не разрешенных тегов (вот моя проблема)
  3. сохранить данные на моей базе данных

Может ли кто-нибудь помочь мне с этим? Или предложить мне что-то еще?

+0

Вы писали свой парсер самостоятельно? Какое исключение оно возвращает? – Archangel33

+0

Нет, я не писал это сам. Я использую bbcode кода kicker. К сожалению, я не с моим кодом прямо сейчас, поэтому я не могу сказать вам, какое исключение выбрано, но если я найду способ удалить недопустимые теги перед разбором, это было бы здорово для меня. [link] https://bbcode.codeplex.com/ –

+0

Исключено: ** CodeKicker.BBCode.BBCodeParsingException: размер тега не существует ** SIZE - это не поддерживаемый тег для моего приложения. –

ответ

0

После краткого анализа синтаксического анализатора src, найденного по предоставленной вами ссылке, кажется, что если он работает с тегом, который он не знает (что не указано в списке тегов, предоставленных во время создания экземпляра), он выдает ошибки (в некотором роде).

Поскольку это стоит, похоже, у вас есть несколько вариантов:

  1. изменить ваши ErrorMode к ErrorFree.
    • это больше не будет производить никаких исключений и вместо этого обработать Unknown tags в виде текста.
  2. Пойдите с оригинальной идеей и ограничьте ввод на переднем конце.
  3. Если вы можете вместо прямого доступа к HTML добавить всевозможные теги в парсер, проверьте, можете ли вы получить объект C# из анализатора и устранить ненужные теги перед выходом в html.

  4. Или в результате перехода из строя после создания html запрещается использование сгенерированных тегов HTML.

  5. Отправьте авторам синтаксического анализа письмо электронной почты/(если вы знаете немецкий) билет/вопрос на codeplex и попросите их добавить поддержку для разметки нежелательных тегов.

  6. Или, если вы хотите, так как у вас есть функциональность ЦСИ добавить раздеться нежелательные теги, сами

    • Это не должно быть слишком трудно, я думаю, по той же схеме они имеют для текущего Tags списка в BBCodeParser.cs и сделайте список TagsToIgnore и просто добавьте чек перед остальной частью разбора тега, чтобы разделить/продолжить до следующего токена.

EDIT: Вы можете быть в состоянии сделать парсер интерпретировать теги для отображения ничего. где вы запускаете bbCodeParser.

var parser = new BBCodeParser(new[] 
      { 
       // keep these tags 
       new BBTag("b", "<b>", "</b>"), 
       new BBTag("i", "<span style=\"font-style:italic;\">", "</span>"), 
       new BBTag("u", "<span style=\"text-decoration:underline;\">", "</span>"), 
       // remove these (or at least there markup) 
       new BBTag("code", "", ""), 
       new BBTag("img", "", ""), 

      }); 
+0

Я все еще думаю, что поеду с номером 2 (Иди с моей оригинальной идеей). Но может ли кто-нибудь помочь мне с помощью метода его ограничения? –

+0

вы могли написать простой пред-парсер, который просто снимал любые неизвестные/ненужные теги и содержал их. – Archangel33

+0

Я уже пробовал. Не работает. У меня есть то, что я хотел, но используя регулярное выражение для некоторых нежелательных тегов. Проблема в том, что если какой-либо другой нежелательный тег, который не находится в моем RegEx, он будет вызывать ту же ошибку. Поэтому мне придется поддерживать этот метод навсегда (или, по крайней мере, до тех пор, пока больше никто не будет вводить нежелательные метки). –