Comment supprimer plusieurs barres obliques dans URI avec 'PREG' ou "HTACCESS" P>
Site.com/edition/new /// -> Site.com/edition/new / P>
Site.com/edition /// nouvelle / -> Site.com/edition/new / P>
merci p>
5 Réponses :
EDIT: HA J'ai lu cette question comme "sans preg" oh bien: 3
Utilisation du symbole plus + code> dans regex signifie la survenue d'un ou plusieurs du caractère précédent. Donc, nous pouvons l'ajouter dans un Preg_replace de remplacer la survenue d'un ou plusieurs
/ code> par l'un d'entre eux
Bonne idée, mais comment puis-je faire la vérification après "édition" comme cet exemple $ URL = "Site.com/edition//new///"; $ newurl = preg_replace ('/ édition (\ / +) /', '/', $ url); Je ne sais pas appliquer
http://domain.com/test/test/ > http:/domain.com/test/test http:/domain.com//test//test// > http://domain.com/test/test/ p> change r vers r = 301 Si tout fonctionne bien après avoir testé ... p> Est-ce que quelqu'un sait-on préserver les doubles barres à barres dans la requête en utilisant la méthode ci-dessus? P> (Par exemple: / Test // Test //? test = test // test> / test / test /? test = test // test) p> p>
$url = 'http://www.abc.com/def/git//ss'; $url = preg_replace('/([^:])(\/{2,})/', '$1/', $url); // output http://www.abc.com/def/git/ss $url = 'https://www.abc.com/def/git//ss'; $url = preg_replace('/([^:])(\/{2,})/', '$1/', $url); // output https://www.abc.com/def/git/ss
Belle réponse, pourriez-vous s'il vous plaît expliquer comment cette regex fonctionne?
Sur l'outil lié par @ ツ Liverbool Coller ([^:]) (\ / {2,}) code> comme regex, puis coller $ URL en tant que chaîne de test ou toute autre URL que vous souhaitez tester
@Gilhan la séquence [...] signifie correspondre à l'un de ces caractères. Dans ce cas, [^:] signifie faire correspondre n'importe quel caractère sauf un côlon. Le meneur ^ nie la séquence. Cette séquence est entourée de parenthèses qui en fait un «groupe de capture» et la valeur capturée peut être utilisée dans la substitution que la séquence [\ /] {2,} signifie que deux ou plusieurs barres obliques. Étant donné que l'expression entière est délimitée par des barres obliques, la barre oblique correspondante doit être évanouie, ce qui est ce que fait la barre oblique inverse. Cette séquence est entourée de parenthèses afin qu'elle soit également capturée mais ce n'est pas nécessaire.
@Gilhan Notez que l'exemple fourni dans la réponse ne fonctionne pas s'il y a plus d'une séquence d'esclaves à terme tels que: exemple.com/def//git//ss Comme l'expression correspondre à la première instance. Pour résoudre ce problème, il devrait utiliser la directive "gourmande": Preg_replace ('/ ([^:]) \ / {2,} / g', '/')
simple, cochez cet exemple: sortie: p>