Fonction str_replace

Répondre
jackbocar
le 18/10/2007 à 16:12
jackbocar
Bonjour,

Les fonctions : str_replace, peut-on les utiliser sous cette forme sans causer de pertes de données, ou ralentir les systèmes ?


<?php
function caracteres($chaine){
$chaine = str_replace('à','&agrave;;',$chaine);
$chaine = str_replace('é','&eacute;',$chaine);
$chaine = str_replace('è','&egrave;',$chaine);
$chaine = str_replace('ê','&ecirc;',$chaine);
$chaine = str_replace('ç','&ccedil;',$chaine);
$chaine = str_replace('ï','&iuml;',$chaine);
$chaine = str_replace('î','&icirc;',$chaine);
$chaine = str_replace('Î','&Icirc;',$chaine);
$chaine = str_replace('ô','&ocirc;',$chaine);
$chaine = str_replace('ù','&ugrave;',$chaine);
$chaine = str_replace('û','&ucirc;',$chaine);
return $chaine;
}

?>



Ces fonctions pour remplacer les mots accentués après avoir été extrait de la table fonctionnent parfaitement bien en local.

Jack Bocar
i M@N
le 18/10/2007 à 16:44
i M@N
hello.

Bon y'a un principe de base quand on veut coder quelque chose : ne pas réinventer la roue ...
$chaine = str_replace('à','&agrave;;',$chaine);

ça veut dire en PHP : remplace 'à' par '&agrave;;' dans $chaine ...

il existe la fonction htmlentities($chaine); qui fait exactement ça. smiley

@+...
One Love, One Heart, One Unity.
LupusMic
le 19/10/2007 à 01:11
LupusMic
i M@n a donné la solution à ton problème. Mais pour répondre à ton interrogations, non, il n'y a pas de risque de perte de données.

Mais c serait plus élégant ainsi :

<?php
function caracteres($chaine){

$chaine = str_replace
( array('à','é','è','ê','ç','ï','î','Î','ô','ù','û')
, array
( '&agrave;'
, '&eacute;'
, '&egrave;'
, '&ecirc;'
, '&ccedil;'
, '&iuml;'
, '&icirc;'
, '&Icirc;'
, '&ocirc;'
, '&ugrave;'
, '&ucirc;'
)
, $chaine
) ;

return $chaine;
}

?>
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
jackbocar
le 19/10/2007 à 09:14
jackbocar
Bonjour,

Cette fonction, je la connais, mais lorsque je l'utilise, la fonction nl2br(), ne fonctionne plus.

Pour mes besoins, je veux pouvoir envoyer mes textes dans ma table avec les é, à ç, ù, ô etc.

Je ne veux pas que les lettres accentuées ne se transforme par des ?

J'insert dans la table en ISO, et je lis en ISO, mais pour les autres, si des lecteurs étrangers qui fonctionnent avec des navigateurs paramétrés différemment du mien, je ne veux pas nom plus qu'ils voient dès qu'ils ouvrent la page des ?.

C'est pour cette raison que je change les caractères accentués et seulement ces caractères en code HTML.

Si tu as une méthode pour faire fonctionner htmlentities() sans que nl2br() ou les <a href="">, ne soit de ce fait utilisables, dis-moi clairement de quelle manière dois-je faire.

Et pas il existe cette fonction, oui, elle existe, mais elle perturbe ceci ou cela.

Alors, comment dois-je faire ?

Pour mémoire, je ne protège aucunes données à l'insertion dans mes tables, je ne sais pas ce qui est le mieux pour moi et surtout, ne pas rencontrer de problèmes.

Avec ISO, j'utilisais :

Insertion
mysql_escape_string($_POST[])

Lecture
nl2br(htmlentities(trim($data)

Mais, j'ai des problèmes cités plus haut

Jack Bocar



Merci LupusMic
pour le code plus élégant

Jack Bocar
jackbocar
le 20/10/2007 à 17:27
jackbocar
Bonjour,

Merci de ta réponse.

Mais, ce que j'aimerai que l'on me dise ou que l'on me donne une hiérarchie conventionnelle qui serait :

1 – Lorsque tu inserts avec un formulaire qu'elle protections conventionnelles doit-ont placé devant : $_POST['nouvelle'] ?
Pour que dans la table, les é, à, è ne se transforment pas par des ?

1 – Lorsque tu lis la nouvelle, quelle protections doit-ont placé devant : $obj->nouvelle ?

Mes pages sont codées en ce moment avec : charset=iso-8859-1 ainsi que mes tables.

Je sais qu'il faudrait que je me serve de charset=utf-8, mais dans le cas d'insertion, mes caractères accentués se transforment dans la table par des ?

Alors, que dois-je faire pour travailler avec des encodages charset=utf-8 tables et pages ?

Pour mon cas personnel, je travail avec PHP5 et MYSLI, j'ai donc comme protection sur mes ouvrages pour insérer : mysqli_real_escape_string( $_POST['nouvelle']), il n'est pas spécifié de type d'encodage pour les charsets le la table.

Pour ne pas avoir de problèmes de lectures, il faut que je protège avec quoi pour ceci : $obj->nouvelle ?

Merci de ta réponse, mais fais moi SVP un exemple pour travailler avec l'encodage charset=utf-8.

Jack Bocar
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours