Wie kann ich eine Zeichenfolge in Erlang XML-encodieren?

8

Ich habe eine Erlang-Zeichenfolge, die Zeichen wie & amp; "& lt; und so weiter:

%Vor%

Gibt es irgendwo eine Erlang-Funktion, die den String analysiert und alle benötigten HTML / XML-Entities kodiert, zB:

%Vor%

?

Mein Anwendungsfall ist für relativ kurze Strings, die von Benutzereingaben kommen. Die Ausgabezeichenfolgen der xmllencode-Funktion sind der Inhalt von XML-Attributen:

%Vor%

Das endgültige XML wird über die Leitung geschickt gesendet.

    
ettore 26.07.2010, 21:06
quelle

3 Antworten

4

Es gibt eine Funktion in der Erlang-Distribution, die spitze Klammern und kaufmännische Zeichen ausschließt, aber es ist nicht dokumentiert, daher ist es wahrscheinlich nicht das Beste, sich darauf zu verlassen:

%Vor%

Wenn Sie XML-Strukturen erstellen / kodieren wollen (anstatt nur eine einzelne Zeichenfolge zu codieren), wäre die xmerl-API eine gute Option, z. B.

%Vor%     
user2986 26.07.2010 22:18
quelle
2

Wenn Ihre Anforderungen einfach sind, können Sie dies mit einer Karte über die Zeichen in der Zeichenfolge tun.

%Vor%

Dann würden Sie

machen %Vor%

Aber Quoted wäre keine flache Liste, was immer noch gut ist, wenn Sie es in eine Datei oder als HTTP-Antwort senden. I.e. siehe Erlangs Io-Listen.

In neueren Versionen von Erlang gibt es jetzt Encode-decode-Funktionen für Multibyte utf8 zu Wide-Byte / Codepoint-Repräsentationen, siehe Erlang Unicode Modul .

Umformatierte Kommentare, um Codebeispiele hervorzuheben:

ettore Das ist etwas, was ich mache, obwohl ich Multibyte-Zeichen unterstützen muss. Hier ist mein Code:

%Vor%

Obwohl ich es vorziehen würde, das Rad nach Möglichkeit nicht neu zu erfinden.

dsmith : Die von Ihnen verwendete Zeichenfolge wäre normalerweise eine Liste von Unicode-Codepunkten (dh eine Liste von Zahlen), und daher ist jede gegebene Bytecodierung irrelevant. Sie müssen sich nur um bestimmte Codierungen kümmern, wenn Sie direkt mit Binärdateien arbeiten.

Zur Klarstellung wäre der Unicode-Codepunkt für das Euro-Symbol (Dezimalzahl 8364) ein einzelnes Element in Ihrer Liste. Du würdest das einfach tun:

%Vor%     
Christian 26.07.2010 22:06
quelle
1

Ich bin mir in den enthaltenen OTP-Paketen nicht bewusst. Allerdings Mochiweb Modul mochiweb_html: hat eine Escape-Funktion: mochiweb_html.erl es behandelt Listen, Binärdateien und Atome.

Und für die URL-Codierung prüfen Sie das mochiweb_util-Modul: mochiweb_util.erl mit seiner URL Funktion.

Sie könnten eine dieser Bibliotheken verwenden, um zu bekommen, was Sie brauchen.

    
Jeremy Wall 28.07.2010 06:04
quelle