Проблема с регулярным выражением для удаления тегов HTML - PullRequest
5 голосов
/ 13 февраля 2009

В своем приложении на Ruby я использовал следующий метод и регулярное выражение для удаления всех тегов HTML из строки:

str.gsub(/<\/?[^>]*>/,"")

Это регулярное выражение сделало почти все, что я ожидал, за исключением того, что все кавычки были преобразованы в &#8220; и все одинарные кавычки должны быть изменены на &#8221; .

Какая очевидная вещь, которую мне не хватает, чтобы преобразовать грязные коды обратно в их правильные символы?

Редактировать: проблема возникает с регулярным выражением или без него, поэтому ясно, что моя проблема не имеет к этому никакого отношения. Мой вопрос сейчас заключается в том, как справиться с этой ошибкой форматирования и исправить ее. Спасибо!

Ответы [ 5 ]

5 голосов
/ 15 февраля 2009

Используйте CGI :: unescapeHTML после выполнения подстановки регулярного выражения:

CGI::unescapeHTML(str.gsub(/<\/?[^>]*>/,""))

См. http://www.ruby -doc.org / core / classes / CGI.html # M000547

В приведенном выше фрагменте кода gsub удаляет все теги HTML. Затем unescapeHTML () возвращает все сущности HTML (например, <, & # 8220) в их действительные символы (<, кавычки и т. Д.) </p>

Относительно другого поста на этой странице, обратите внимание, что вам никогда никогда не будет передаваться HTML, например

<tag attribute="<value>">2 + 3 < 6</tag>

(что является недействительным HTML); вместо этого вы можете получить:

<tag attribute="&lt;value&gt;">2 + 3 &lt; 6</tag>

Вызов gsub преобразует вышеприведенное в:

2 + 3 &lt; 6

И unescapeHTML завершит работу:

2 + 3 < 6
2 голосов
/ 13 февраля 2009

Вы столкнетесь с большими проблемами, когда увидите что-то вроде:

<doohickey name="<foobar>">

Вы хотите применить что-то вроде:

gsub(/<[^<>]*>/, "")

... до тех пор, пока шаблон соответствует.

2 голосов
/ 13 февраля 2009

Это регулярное выражение все, чего я ожидал, кроме этого вызвал все кавычки превращается в «и все одинарные кавычки, которые будут изменены на » .

Это не звучит так, как если бы RegExp делал это. Вы уверены, что раньше все было иначе?

См. Этот вопрос здесь для получения информации о проблеме, он получил отличный ответ:
Получить поля формы, отличные от UTF-8, как UTF-8 в php.

0 голосов
/ 14 февраля 2009

У меня возникла похожая проблема с изменением символов, это произошло, когда мой код проходил через другой модуль, обеспечивающий кодировку UTF-8, а затем, когда он вернулся, у меня был другой файл (разбитый массив строк) на моем Руки.

0 голосов
/ 13 февраля 2009

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

После запуска регулярного выражения запустите выражение для преобразования & 8220; в кавычки, а другое - для преобразования & 8221; в одинарные кавычки.

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