#5246 - Note : regex
http://lehollandaisvolant.net/?mode=links&id=20130322000304
Une journée à plancher sur OranjeProxy : je veux proxifier toutes les ressources externes (normal), donc aussi les liens.
Sauf les liens contenant mailto:, javascript: ou des trucs base 64 (data:).
Ça c’est juste pour les href et les src. Maintenant y’a tous les "onload", "onmouseover" aussi…
Sans compter les gens qui utiliser href='site' avec le guillement simple au lieu de double.
Attendez !
Dans un href="…" il peut y avoir du javascript ? Oui, et donc aussi des « ' » et même des « " » précédé d’un antislash.
Il faut donc une seule régex qui match :
<a href="prout">
<a href='prout'>
<a href="javascript:00+'étrange'bla">
<a href="javascript:00+\"étrange\"bla">
<a href="javascript:00+'étrange'bla" onclic="javascript:idem ici">
Et les mêmes avec une inversion entre ' et ". Le gros bordel.
Moi je fais ça en PHP avec des regex. J’imagine à peine le bordel que c’est que de coder un navigateur : qui doit parser du HTML, du CSS et du JS tout mélangé…
Oh, et j’ai mis 3 h à comprendre qu’en PHP, les références arrières c’est ça : \g{1} au lieu de \1. (le second n’a aucun effet chez moi : il ne matche pas même "b(o)nj\1ur", alors que le \1 devrait contenir le "o" de la première parenthèse.
Bonne nuit !
Sauf les liens contenant mailto:, javascript: ou des trucs base 64 (data:).
Ça c’est juste pour les href et les src. Maintenant y’a tous les "onload", "onmouseover" aussi…
Sans compter les gens qui utiliser href='site' avec le guillement simple au lieu de double.
Attendez !
Dans un href="…" il peut y avoir du javascript ? Oui, et donc aussi des « ' » et même des « " » précédé d’un antislash.
Il faut donc une seule régex qui match :
<a href="prout">
<a href='prout'>
<a href="javascript:00+'étrange'bla">
<a href="javascript:00+\"étrange\"bla">
<a href="javascript:00+'étrange'bla" onclic="javascript:idem ici">
Et les mêmes avec une inversion entre ' et ". Le gros bordel.
Moi je fais ça en PHP avec des regex. J’imagine à peine le bordel que c’est que de coder un navigateur : qui doit parser du HTML, du CSS et du JS tout mélangé…
Oh, et j’ai mis 3 h à comprendre qu’en PHP, les références arrières c’est ça : \g{1} au lieu de \1. (le second n’a aucun effet chez moi : il ne matche pas même "b(o)nj\1ur", alors que le \1 devrait contenir le "o" de la première parenthèse.
Bonne nuit !