OVH Cloud OVH Cloud

transformer un antislash en slash avec preg_replace

3 réponses
Avatar
Nicolas ROBERT
bonjour,

je n'ai jamais utilisé cette fonction preg_replace().
Je souhaite écrire une fonction qui tranforme une chaine contenant des
antislash en une chaine contenant des slash.

j'ai essayé le découpage de ma chaine avec explode, puis la concaténation
de mes sous-chaines avec des slash, mais cette solution ne marche pas très
bien (ex: le cas "blabla\truc" genere une erreur car \t est considéré comme
un caractère spécial).

je voudrais écrire quelque-chose de plus simple, ressemblant à ceci:

function backtoslash($chaine){
$out=preg_replace("/ \\ / "," / ",$chaine);
return $out;
}

Quelqu'un pourrait-il me donner les masques qui vont bien ?
D'avance merci.
Nicolas ROBERT.

3 réponses

Avatar
Olivier Miakinen

je n'ai jamais utilisé cette fonction preg_replace().
Je souhaite écrire une fonction qui tranforme une chaine contenant des
antislash en une chaine contenant des slash.


Il ne faut *surtout* pas aller chercher les expressions rationnelles
pour un remplacement aussi simple ! C'est prendre un marteau pilon pour
écraser une mouche.

je voudrais écrire quelque-chose de plus simple, ressemblant à ceci:

function backtoslash($chaine){
$out=preg_replace("/ / "," / ",$chaine);
return $out;
}


Pour remplacer une chaîne fixe par une autre chaîne fixe, tu as
str_replace() :
http://fr2.php.net/manual/fr/function.str-replace.php
$out = str_replace('', '/', $chaine);

Mais pour un simple caractère, il y a encore plus simple :
http://fr2.php.net/manual/fr/function.strtr.php
$out = strtr($chaine, '', '/');

Tant que tu y es, jette donc un coup d'½il à toutes les fonctions de
manipulation de chaînes de caractères. Ça ne peut pas faire de mal
d'avoir lu au moins une fois une description de chaque fonction, pour
savoir qu'elle existe le jour où tu en auras besoin.
http://fr2.php.net/manual/fr/ref.strings.php

Avatar
Nicolas ROBERT
bonjour,

J'ai trouvé une petite parade permettant de contourner le problème des
caractères spéciaux. Ce n'est pas parfait mais ça a le mérite de
fonctionner.

<?
function backtoslash($chaine){
$masque=array(chr(9),chr(10),chr(13)); // tableau des caractères
spéciaux: t , n , r
$remplace=array('/t','/n','/r'); //tableau de remplacement

$out=str_replace($masque,$remplace,$chaine); //on remplace les
caractères spéciaux
$out=str_replace("","/",$out); // on remplace les backslash simples

return $out;
}
?>

Je me permet de rajouter un lien vers une page pouvant servir à la
communauté de développeurs, contenant un tableau des codes ascii et hexa des
caractères:
http://www.asciitable.com/

Si quelqu'un souhaite poser un laïus particulier ou une autre solution, je
suis à l'écoute...

Cordialement.
Avatar
Nicolas ROBERT

je n'ai jamais utilisé cette fonction preg_replace().
Je souhaite écrire une fonction qui tranforme une chaine contenant des
antislash en une chaine contenant des slash.


Il ne faut *surtout* pas aller chercher les expressions rationnelles
pour un remplacement aussi simple ! C'est prendre un marteau pilon pour
écraser une mouche.


Ce n'est pas la question. En l'occurence aucune des Deux solutions que tu
proposes ne marchent.
et tu vas voir pourquoi.


je voudrais écrire quelque-chose de plus simple, ressemblant à ceci:

function backtoslash($chaine){
$out=preg_replace("/ / "," / ",$chaine);
return $out;
}


Pour remplacer une chaîne fixe par une autre chaîne fixe, tu as
str_replace() :
http://fr2.php.net/manual/fr/function.str-replace.php
$out = str_replace('', '/', $chaine);


testons la fonction avec la chaine "C:Program Filesmon Programmetoto.txt"
Ô surprise, nous obtenons C:/Program Files/mon Programme oto.txt.

eh oui, le t est fait bien partie des caractères spéciaux, et donc
str_replace ne le reconnaît pas


Mais pour un simple caractère, il y a encore plus simple :
http://fr2.php.net/manual/fr/function.strtr.php
$out = strtr($chaine, '', '/');


En l'occurence, comme je l'ai dit sur mon premier fil, ma chaine contient
plusieurs


Tant que tu y es, jette donc un coup d'½il à toutes les fonctions de
manipulation de chaînes de caractères. Ça ne peut pas faire de mal
d'avoir lu au moins une fois une description de chaque fonction, pour
savoir qu'elle existe le jour où tu en auras besoin.
http://fr2.php.net/manual/fr/ref.strings.php


Je les ai lu de nombreuses fois rassure-toi.
Je cherche toujours le masque qui irait bien.

cordialement.