2009-02-12 8 views
5

In meinem Ruby-App zu entfernen, habe ich die folgende Methode und reguläre Ausdrücke verwendet, um alle HTML-Tags aus einer Zeichenfolge zu entfernen:Problem mit Regular Expression HTML Stichworten

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

Dieser reguläre Ausdruck nur über alles, was ich tat wurde erwartet, außer dass alle Anführungszeichen in &#8220; umgewandelt wurden und alle einfachen Anführungszeichen in &#8221; geändert wurden.

Was ist die offensichtliche Sache, die ich vermisse, um die unordentlichen Codes wieder in ihre richtigen Charaktere umzuwandeln?

Edit: Das Problem tritt mit oder ohne den regulären Ausdruck, so ist es klar, mein Problem hat nichts damit zu tun. Meine Frage ist jetzt, wie man mit diesem Formatierungsfehler fertig wird und es korrigiert. Vielen Dank!

+0

Sind Sie eine Art mit von "Zitat Schönmacher"? – Gumbo

Antwort

-3

Sie könnten ein Multi-Pass-System verwenden, um die Ergebnisse zu erhalten, die Sie suchen.

Nachdem Sie Ihren regulären Ausdruck ausgeführt haben, führen Sie einen zu konvertierenden Ausdruck aus & 8220; in Anführungszeichen und ein anderes zu konvertieren & 8221; zu einfachen Anführungszeichen.

2

Sie werden in mehr Schwierigkeiten laufen, wenn Sie so etwas wie sehen:

<doohickey name="<foobar>"> 

Sie werden wie etwas anwenden möchten:

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

... so lange, wie die Muster passt.

+0

Sofern Sie nicht gemeint haben, dass das OP bereit sein sollte, mit gefälschtem/ungültigem HTML umzugehen, liegt es falsch. Dieses Formular wird nie in korrektem HTML angezeigt. –

2

Dieser reguläre Ausdruck tat fast alles, was ich es zu erwarten war, außer es alle Anführungszeichen verursacht in “ umgewandelt werden und alle einfache Anführungszeichen ” geändert werden.

Das klingt nicht, als würde die RegExp dies tun. Bist du sicher, dass es vorher anders ist?

Sehen Sie diese Frage hier für Informationen über das Problem, es eine ausgezeichnete Antwort bekommen hat:
Get non UTF-8 form fields as UTF-8 in php.

+0

Heilige Kuh, du hast Recht. Ich bemerkte es nach dem Hinzufügen der Regex, aber die Wirkung auf die Charaktere passiert in beide Richtungen. Ich hatte es einfach nicht bemerkt, weil es weniger offensichtlich war. Also meine Frage wird: Wie repariere ich diese Formatierung? – btw

0

ich in ein ähnliches Problem mit Charakter Änderungen ausgeführt haben, geschah dies, wenn mein Code durch ein anderes Modul lief, dass erzwungene UTF-8-Kodierung und dann, als es zurückkam, hatte ich eine andere Datei (schlurfte Reihe von Linien) auf meinen Händen.

5

Verwenden CGI :: unescapeHTML, nachdem Sie Ihren regulären Ausdruck Substitution durchführen:

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

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

In dem obigen Codeausschnitt Siehe entfernt gsub alle HTML-Tags. Dann setzt unescapeHTML() alle HTML-Entitäten (wie <, & # 8220) auf ihre tatsächlichen Zeichen (<, Anführungszeichen usw.) zurück.)

In Bezug auf eine andere Stelle auf dieser Seite beachten Sie, dass Sie nie jemals HTML wie

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

(die ungültige HTML ist); was Sie können erhalten ist, statt:

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

Der Aufruf der oben auf gsub verwandeln:

2 + 3 &lt; 6 

Und unescapeHTML wird den Job beenden:

2 + 3 < 6