PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [JavaScript] replace()


esistich
2008-12-04, 13:39:59
Hat jemand eine Ahnung, wie ich den Code hier XHTML valide kriege?

vari = vari . replace ( /</g, "&lt;" ) ;

Das Problem liegt darin, daß "</" bzw. "</tag>" in einem Script/String nicht valide ist, sondern "<\/tag>".
Doof ist nur, daß das kein ausgehnder Tag sondern Teil einer JS Funktion ist.

Das ganze löse ich zZt. mit


vari = vari . replace ( RegExp ( "<", "g" ), "&lt;" ) ;


Würde aber gerne sowas wie

vari = vari . replace ( /<\//g, "&lt;" ) ;

verwenden, nur klappt das nicht so richtig, hat jemand eine Idee?

Sephiroth
2008-12-04, 23:11:35
In eine js-Datei auslagern oder ordentlich einbinden mit CDATA.
<script type="text/javascript">
// <![CDATA[
var foo="<hallo>huhu</hallo>";
alert(foo);
foo = foo.replace(/</g, "&lt;");
alert(foo);
// ]]>
</script>

esistich
2008-12-05, 08:34:52
In eine js-Datei auslagern oder ordentlich einbinden mit CDATA.
<script type="text/javascript">
// <![CDATA[
var foo="<hallo>huhu</hallo>";
alert(foo);
foo = foo.replace(/</g, "&lt;");
alert(foo);
// ]]>
</script>


Auslagern geht nicht (mehrere Gründe), es geht auch nicht um die Funktion selbst oder das ordentliche Einbinden, sondern das der W3C Parser einen ausgehenden Tag wahrnimmt.


[...]
foo = foo.replace(/</g, "&lt;");
[...]


so wie hier

[...]
foo = "<tag>bla blubb...</tag>" ;
[...]


und dshalb sowas verlangt

[...]
foo = "<tag>bar<\/tag>" ;
[...]


was natürlich hier fatale Folgen hätte

[...]
foo = foo.replace(/<\/g, "&lt;");
[...]


ich suche eine Möglichkeit, das ganze zu escapen, damit W3C nicht aufmuckt.

Tommes
2008-12-05, 09:42:36
CDATA sollte da trotzdem helfen ;)

esistich
2008-12-05, 12:35:24
CDATA sollte da trotzdem helfen ;)

habe ich auch gedacht, tut es aber nicht.

Sephiroth-Gast
2008-12-05, 16:47:34
habe ich auch gedacht, tut es aber nicht.
sieh und staune (http://validator.w3.org/check?uri=http%3A%2F%2Fwww.sephiroth-j.de%2F1%2Ftest2.php&charset=(detect+automatically)&doctype=Inline&ss=1&group=0&accept=text%2Fhtml%2Capplication%2Fxhtml%2Bxml%2Capplication%2Fxml%3Bq+0.9%2C*%2 F*%3Bq+0.8&accept-language=de-de%2Cde%3Bq+0.8%2Cen-us%3Bq+0.5%2Cen%3Bq+0.3&accept-charset=ISO-8859-1%2Cutf-8%3Bq+0.7%2C*%3Bq+0.7&user-agent=W3C_Validator%2F1.606#line-18)

esistich
2008-12-05, 17:53:20
sieh und staune (http://validator.w3.org/check?uri=http%3A%2F%2Fwww.sephiroth-j.de%2F1%2Ftest2.php&charset=(detect+automatically)&doctype=Inline&ss=1&group=0&accept=text%2Fhtml%2Capplication%2Fxhtml%2Bxml%2Capplication%2Fxml%3Bq+0.9%2C*%2 F*%3Bq+0.8&accept-language=de-de%2Cde%3Bq+0.8%2Cen-us%3Bq+0.5%2Cen%3Bq+0.3&accept-charset=ISO-8859-1%2Cutf-8%3Bq+0.7%2C*%3Bq+0.7&user-agent=W3C_Validator%2F1.606#line-18)

Hier zu sehen (http://freenet-homepage.de/skydiver_1/misc/cdata.jpg) gibt HTML-Tidy 2 Warnungen. Daher ist es wahrscheinlich, daß der Validator vom Kunden sich auch meldet und ich will ihm nicht sagen "Ja aber, auf der Website von W3C ist alles OK".

Außerdem habe ich das Script ja schon valide umgeschrieben, mir geht es primär darum zu erfahren, wie man replace() escapebar macht bzw. ob es überhaupt escapebar ist.

Gast
2008-12-05, 18:21:25
Nein du kannst den Delimiter für deinen regulären Ausdruck nicht escapen, wenn du das Regex-Object so als String darstellst. Den Ausweg hast du ja schon erkannt.

Das Problem ist eher bei Tidy zu suchen, wenn alle anderen damit kein Problem haben.

esistich
2008-12-05, 20:13:43
Habe jetzt folgendes probiert


[...]
foo = foo . replace ( /[<]/g, "&lt;" ) ;
[...]


und es klappt.

THX @ all.