remplacer guillemets par ceux de Word

WRInaute occasionnel
Bonjour

Je cherche un p'tit bout de code pour remplacer les doubles-cotes par les guillemets style Word (« et » en html)
Comme il faut remplacer " mon texte " par « mon texte » il faut detecter le 1er guillemet puis le second pour les remplacer.

Quelqu'un à deja utilisé un systeme pour faire ca ?

Merci
 
WRInaute occasionnel
UsagiYojimbo merci pour ton lien mais ca ne sert à rien de mettre que ce lien.... Ou alors explique moi comment faire avec cette fonction


Merci
 
WRInaute accro
IMHO le plus simple est de se baser sur la règle grammaticale des ouvertures et fermetures de guillemets :
- Lorsqu'un guillemet est ouvrant, on place un espace avant et pas d'espace après.
- Lorsqu'un guillement est fermant, on place un espace après et pas avant.

Donc tu peut faire :
Code:
$str = str_replace(' "', ' «', $str);
$str = str_replace('" ', '» ', $str);
 
WRInaute occasionnel
dmathieu, je ne suis pas sur que ca soit bon

si j'ai " mon texte " à traiter, il y a un espace avant et apres.

Donc ta 1ere regle espace-guillemet va etre appliquée tout le temps
 
WRInaute passionné
dmathieu a dit:
- Lorsqu'un guillemet est ouvrant, on place un espace avant et pas d'espace après.
- Lorsqu'un guillement est fermant, on place un espace après et pas avant.
Les options de base de Word mettent un espace devant et un espace derrière. :wink:

Il faut passer par un regex (code suivant à vérifier car PHP n'est pas mon langage de prédilection) :
Code:
$patterns = array();
$replacements = array();
$patterns[] = "\"(.*)\"/isU";
$replacements[] = "«\\1»";
$str = preg_replace($patterns, $replacements, $str);
On cherche des paires de guillemets plutôt que de chercher des guillemets isolés.
 
WRInaute accro
[grillé]

Je dirais (pas testé):
Code:
preg_replace('#"[^"]+"#','\xAB$1\xBB',$string)

Si tu es en ISO-8859-1. En UTF-8 ce sera \xC2\xAB et \xC2\xBB.

Evidemment tout ça suppose que les guillemets vont bien par paire, qu'ils ne sont pas imbriqués, et que ce sont bien des guillemets "français" que tu veux (on n'utilise pas les mêmes en anglais par exemple).

Jacques.
 
WRInaute occasionnel
anemone-clown c'est nikel ca fonctionne... (J'ai juste du ajouter un slash en plus)

Code:
$patterns[] = "/\"(.*)\"/isU";

Merci à tous
 
Discussions similaires
Haut