[PHP] Remplacer le caractère pourcentage [Résolu/Fermé]

Signaler
Messages postés
5
Date d'inscription
lundi 5 septembre 2011
Statut
Membre
Dernière intervention
8 septembre 2011
-
Messages postés
1
Date d'inscription
lundi 4 février 2013
Statut
Membre
Dernière intervention
4 février 2013
-
Bonjour, je développe actuellement un formulaire pour un site web.

Lorsque le formulaire est validé je passe le contenu du texte dans une fonction qui m'enlève tous les accents et les remplace pour des caractères normaux, exmple : é = e.

J'aimerais aussi pouvoir remplacer le caractère "%" pourcentage par "0/0" car cela me pose quelques problèmes. Je sais que l'on peut utiliser la fonction str_replace mais j'ai l'impression que le caractère % a la même fonction qu'en SQL c'est à dire qu'il remplace tous les caractères...

Si quelqu'un peut m'éclairer un petit peu là dessus ça m'aiderai vraiment. Merci d'avance!



6 réponses

Messages postés
5
Date d'inscription
lundi 5 septembre 2011
Statut
Membre
Dernière intervention
8 septembre 2011
1
Cette une fonction que j'ai prise sur internet mais elle marche très bien pour les accents et certains caractères spéciaux :

<?php
function wd_remove_accents($str, $charset='utf-8') 
{ 
    $str = htmlentities($str, ENT_NOQUOTES, $charset); 
     
    $str = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str); 
    $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. 'oe' 
    $str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères 
     
    return $str; 
}
?>
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Dans ton cas, la fonction transforme les caractères spéciaux en entitées equivalentes HTML et donc le % est transformé en & #37; (l'espace entre le & et les chiffres est volontaire car le parser CCM le transforme à nouveau en % à l'écran).
Donc il faut faire un str_replace sur ce code HTML si bien sûr il n'y a que le signe % à remplacer dans la chaîne et non pas d'autres signes spéciaux car alors il serait mieux d'utiliser un preg_replace :
function wd_remove_accents($str, $charset='utf-8') {
	$str = htmlentities($str, ENT_NOQUOTES, $charset);

	$str = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
	$str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. '&oelig;'
	$str = str_replace('&#37;', 'O/O', $str); // Remplace le % codé en HTML par &#37;
	$str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères

	return $str;
}
Bonjour,
comment est construite ta fonction?
Messages postés
5
Date d'inscription
lundi 5 septembre 2011
Statut
Membre
Dernière intervention
8 septembre 2011
1
D'abord merci de ton aide. Mais j'ai essayé cette nouvelle fonction et je n'ai pas encore réussi à modifier le signe %. Je pense qu'il ça n'a pas fonctionner car lorsque je transfert les informations en mode GET j'ai toujours mon problème, il y a le pourcentage qui casse toutes les informations. Car un espace est représenté par "%20".

Ne me demande pas pourquoi je fais un $_GET, je suis obligé car lorsque je valide mon formulaire je récupère les données en mode $_POST sur un autre fichier php et ensuite je dois les envoyer dans un format spécial vers un autre fichier php qui est sur un autre serveur.

Si tu as une idée pour m'aider je prends avec plaisir. Et encore merci !
Messages postés
5
Date d'inscription
lundi 5 septembre 2011
Statut
Membre
Dernière intervention
8 septembre 2011
1
up
Messages postés
5
Date d'inscription
lundi 5 septembre 2011
Statut
Membre
Dernière intervention
8 septembre 2011
1
Résolu !

Finalement la fonction était :

function wd_remove_accents($str, $charset='utf-8') {
$str = htmlentities($str, ENT_NOQUOTES, $charset);

$str = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
$str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. 'œ'
$str = preg_replace('#%#', '0/0', $str); // Remplace le % codé en HTML par %
$str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères

return $str;
}

Donc ce qui veut dire que le pourcentage n'était pas interprété en HTML.
Merci quand même et j'espère que cela pourra en aider un ou deux.
Messages postés
1
Date d'inscription
lundi 4 février 2013
Statut
Membre
Dernière intervention
4 février 2013

je vous sincèrement de cette opportunité que vous m'offrer