[PHP] Remplacer le caractère pourcentage

Résolu/Fermé
rilazzi Messages postés 5 Date d'inscription lundi 5 septembre 2011 Statut Membre Dernière intervention 8 septembre 2011 - Modifié par rilazzi le 8/09/2011 à 11:40
khouss Messages postés 1 Date d'inscription lundi 4 février 2013 Statut Membre Dernière intervention 4 février 2013 - 4 févr. 2013 à 14:11
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!



A voir également:

6 réponses

rilazzi Messages postés 5 Date d'inscription lundi 5 septembre 2011 Statut Membre Dernière intervention 8 septembre 2011 1
Modifié par rilazzi le 5/09/2011 à 16:51
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
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;
}
0
Bonjour,
comment est construite ta fonction?
0
rilazzi Messages postés 5 Date d'inscription lundi 5 septembre 2011 Statut Membre Dernière intervention 8 septembre 2011 1
Modifié par rilazzi le 7/09/2011 à 15:37
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 !
0
rilazzi Messages postés 5 Date d'inscription lundi 5 septembre 2011 Statut Membre Dernière intervention 8 septembre 2011 1
8 sept. 2011 à 09:36
up
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rilazzi Messages postés 5 Date d'inscription lundi 5 septembre 2011 Statut Membre Dernière intervention 8 septembre 2011 1
8 sept. 2011 à 15:03
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.
0
khouss Messages postés 1 Date d'inscription lundi 4 février 2013 Statut Membre Dernière intervention 4 février 2013
4 févr. 2013 à 14:11
je vous sincèrement de cette opportunité que vous m'offrer
0