2009-02-12 13 views
5

W mojej aplikacji Ruby, Użyłem następujący sposób i wyrażenie regularne, aby usunąć wszystkie znaczniki HTML z ciągu znaków:Problem z wyrażenia regularnego usunąć znaczniki HTML

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

To wyrażenie regularne nie tylko, o wszystko, co oczekiwał tego, z wyjątkiem tego, że spowodował przekształcenie wszystkich cudzysłowów w &#8220; i wszystkie pojedyncze cudzysłowy, które mają zostać zmienione na &#8221; .

Co jest oczywiste, czego mi brakuje, aby zamienić błędne kody na ich właściwe znaki?

Edytuj: Problem występuje z wyrażeniem regularnym lub bez niego, więc jest oczywiste, że mój problem nie ma z tym nic wspólnego. Moje pytanie brzmi teraz, jak poradzić sobie z tym błędem formatowania i poprawić go. Dzięki!

+0

Używasz jakiegoś z "quote beautifier"? – Gumbo

Odpowiedz

-3

Można użyć systemu wieloprzebiegowego, aby uzyskać oczekiwane wyniki.

Po uruchomieniu wyrażenia regularnego uruchom wyrażenie, aby przekonwertować & 8220; do cytowań i inne do konwersji & 8221; do pojedynczych cytatów.

2

Będziesz napotkasz więcej kłopotów, gdy widzisz coś takiego:

<doohickey name="<foobar>"> 

Będziemy chcieli zastosować coś takiego:

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

... na jak długo dopasowania do wzorca.

+0

Jeśli nie masz na myśli, że OP powinien być przygotowany na radzenie sobie z fałszywym/nieprawidłowym kodem HTML, mylisz się. Ten formularz nigdy nie pojawi się w prawidłowym kodzie HTML. –

2

To wyrażenie regularne nie tylko o wszystko spodziewałem się go, chyba że spowodował wszystkie cudzysłowy być przekształcony “ i wszystkie pojedyncze cytaty zostać zmieniona na ” .

To nie brzmi tak, jakby RegExp robiłby to. Jesteś pewien, że wcześniej było inaczej?

Zobacz to pytanie tutaj aby uzyskać informacje na temat problemu, posiada doskonałą odpowiedź:
Get non UTF-8 form fields as UTF-8 in php.

+0

Święta krowa, masz rację. Zauważyłem to po dodaniu Regexa, ale efekt na postaciach dzieje się w obu kierunkach. Po prostu nie zauważyłem, ponieważ jest mniej oczywiste. Moje pytanie brzmi: Jak naprawić to formatowanie? – btw

0

Zabrakło mi na podobny problem ze zmianą postaci, stało się to, kiedy mój kod przebiegł innego modułu, który wymuszone kodowanie UTF-8, a kiedy wróciło, miałem na ręku inny plik (zmiksowany szereg linii).

5

Zastosowanie CGI :: unescapeHTML po wykonaniu regularnego zastąpienie wyrażenia:

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

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

W powyższym fragmencie kodu, gsub usuwa wszystkie znaczniki HTML. Następnie, unescapeHTML() przywraca wszystkie elementy HTML (takie jak <, & # 8220) do ich rzeczywistych znaków (<, cytaty itp.)

względem innym poście na tej stronie, należy pamiętać, że będzie nigdy kiedykolwiek być przekazywane HTML takich jak

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

(który jest nieprawidłowy HTML); co może pojawić się zamiast:

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

Wezwanie do gsub zmieni wyżej do:

2 + 3 &lt; 6 

I unescapeHTML zakończy pracę:

2 + 3 < 6