Ich habe ein Content-Management-System geschrieben, das einen serverseitigen regulären Ausdruck verwendet, um Ampersands in der Seitenantwort vor dem Senden an den Browser des Clients zu entkommen. Der reguläre Ausdruck berücksichtigt die Und-Zeichen, die bereits maskiert wurden oder Teil einer HTML-Entität sind. Zum Beispiel das Folgende:
%Vor%
wird geändert:
%Vor%
(Nur der erste &
ist modifiziert.) Hier ist der reguläre Ausdruck, der von einem Rails-Helfer übernommen und modifiziert wurde:
%Vor%
Das funktioniert zwar gut, hat aber ein Problem. Der reguläre Ausdruck kennt keine <![CDATA[
oder ]]>
, die die nichtskapierten Ampersands umgeben könnten. Dies ist erforderlich, damit eingebettetes JavaScript unberührt bleibt. Zum Beispiel:
%Vor%
wird leider so dargestellt:
%Vor%
was die JavaScript-Engines natürlich nicht verstehen.
Meine Frage ist: Gibt es eine Möglichkeit, den regulären Ausdruck so zu ändern, dass er genau so funktioniert, wie er es jetzt tut, mit der Ausnahme, dass der Text in einem CDATA-Bereich unberührt bleibt?
Da der reguläre Ausdruck nicht so einfach ist, könnte diese Frage leichter zu beantworten sein: Ist es möglich, einen regulären Ausdruck zu schreiben, der alle Buchstaben in einen Punkt ändert, ausgenommen die Buchstaben zwischen ' <
' und ein Code%'? Zum Beispiel eine, die >
in "some <words> are < safe! >"
ändern würde?