Wie im ursprünglichen Beitrag angesprochen, dürfen nur bestimmte Zeichen für URL-Fragmente verwendet werden. In der ersten Version der Extension wurde der Feldwert daher beim Speichern durch PHP geprüft. Falls notwendig, wurden dabei Ersetzungen durchgeführt. Ab sofort sorgt ein JavaScript dafür, dass sofort beim Verlassen des Feldes eine gleichwertige Evaluierung vorgenommen wird!
Die verschiedenen Schritte sind grundsätzlich ähnlich gehalten wie in PHP:
- Umwandeln in Kleinbuchstaben
- Entfernen von HTML-Elementen
- Ersetzen von Leerzeichen und Tabs durch Bindestriche
- Ersetzen diakritischer Zeichen und Währungen (z.B. àä€)
- Entfernen aller nicht kompatiblen Sonderzeichen
- Ersetzen mehrerer aufeinanderfolgender Bindestriche durch einen einzelnen
- Abschließendes erneutes Umwandeln in Kleinbuchstaben
Ersetzen diakritischer Zeichen
In PHP wird dazu die Klasse CharsetConverter mit einer Zeichentabelle verwendet, die unter typo3temp/var/charset/
Stattdessen habe ich im DataTables-Projekt eine JavaScript-Map mit diakritischen Zeichen und deren Ersetzungen finden können. Glücklicherweise ist dessen Lizenz mit GPL v2 kompatibel. Hier konnte ich die Großbuchstaben aus der Map entfernen und dafür ein paar gängige Währungen ergänzen.
Entfernen aller nicht kompatiblen Sonderzeichen
Wenn der Firefox Unicode property escapes beherrschen würde, wäre alles ganz einfach gewesen:
value = value.replace(/[^\p{L}\p{M}0-9\-_.]/ug, '');
Kann er aber aktuell noch nicht – daher musste ich eine andere Lösung finden. Mithilfe dieses Transpilers habe ich den regulären Ausdruck dann so umgewandelt, dass jeder Browser damit umgehen kann. Dadurch ist er leider deutlich angewachsen.
Durch die Arbeiten habe ich die Gelegenheit gefunden, mich mal etwas näher mit regulären Ausdrücken zu beschäftigen. Zwei Fliegen mit einer Klappe geschlagen!