Проблема с регулярным выражением для удаления тегов HTML

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

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

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

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

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


person btw    schedule 12.02.2009    source источник
comment
Вы используете какое-то «средство для украшения цитат»?   -  person Gumbo    schedule 13.02.2009


Ответы (5)


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

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

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

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

Что касается другого сообщения на этой странице, обратите внимание, что вам никогда никогда не будет передаваться 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
person vladr    schedule 14.02.2009

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

<doohickey name="<foobar>">

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

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

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

person Sniggerfardimungus    schedule 12.02.2009
comment
Если вы не имели в виду, что OP должен быть готов к работе с поддельным / недействительным HTML, вы ошибаетесь. Эта форма никогда не появится в правильном HTML. - person R.. GitHub STOP HELPING ICE; 03.10.2010

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

Это не похоже на то, как если бы RegExp делал это. Вы уверены, что раньше все было по-другому?

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

person Georg Schölly    schedule 13.02.2009
comment
Святая корова, ты прав. Я заметил это после добавления Regex, но влияние на символы происходит в любом случае. Я просто не заметил, потому что это было менее очевидно. Итак, мой вопрос: как мне исправить это форматирование? - person btw; 13.02.2009

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

person Community    schedule 13.02.2009

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

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

person Tim    schedule 12.02.2009