J'ai une fonction qui ajoutera la balise code> avant un lien et
code> après le lien. Cependant, il se casse pour certaines pages Web. Comment amélioreriez-vous cette fonction? Merci!
3 Réponses :
function processString($s) { return preg_replace('/https?:\/\/[\w\-\.!~#?&=+\*\'"(),\/]+/','<a href="$0">$0</a>',$s); }
Je pense qu'un "=" est manquant: il échoue lorsque l'URL contient des paramètres. Je viens de l'ajouter après le "&" et maintenant ça marche: Preg_replace ('/ https ?: \ / \ / [\ w \ - \.! ~? & = + \ * \' "(), \ /] + / ',' 0 $ ', $ s) code>
Vous avez oublié des adresses avec # à l'intérieur - une version si plus correcte est Preg_replace ('/ https ?: \ / \ / [\ w \ - \.! ~ #? & = + \ * \' "() /] + / ',' 0 $ ', $ texte) code>
Je viens de modifier la réponse pour refléter ces deux ajouts.
N'oubliez pas d'ajouter le modificateur 'U »si votre chaîne peut contenir des caractères UTF8
J'ajoute un autre caractère "%". En conséquence: '/Htttps?:\/\/[\w\-%\.!~#?&=+*\'"(),\//]+/', ' 0 $ '
Il se casse pour toutes les URL contenant des caractères HTML "spéciaux". Pour être en sécurité, passez les trois composants de chaîne via HTMLSpecialchars () avant de les concaténer ensemble (sauf si vous souhaitez autoriser HTML à l'extérieur de l'URL). P>
function processString($s){ return preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '<a href="$1">$1</a>', $s); } Found it here
Le même scénario j'en ai besoin dans JQuery / JavaScript. Quelqu'un peut-il aider?
La regex est un peu bâclée, mais 99% de mes contributions auront des URL correctes si
Quelles pages Web casses-t-il?
Au début, vous testez également contre HTTPS, mais plus tard, vous omettez le "S". Ne sais pas, si cela cause cette erreur, parce que je ne sais pas non plus, quelles pages sont cassées;)
Désolé, j'ai supprimé le [S] de la regex. Comment pourrais-je inclure la fonctionnalité pour les chaînes telles que "www.google.com" ou "https: www.example.com"?
"www.google.com" va être plus difficile à analyser. Vous avez besoin d'une longue regèce pour accueillir tous les TLD.