IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Remplacer des caractères spéciaux avec preg_replace [RegEx]


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2017
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Remplacer des caractères spéciaux avec preg_replace
    Bonjour à tous, j'essai d'utiliser le preg_replace mais j'ai deux erreurs qui me bloquent:

    -Notice: Array to string conversion in C:\xampp\htdocs\test_php\test.php on line 34
    -Warning: preg_replace(): Parameter mismatch, pattern is a string while replacement is an array in C:\xampp\htdocs\test_php\test.php on line 34
    Je veux remplacer tous les caractères spéciaux par des caractères normaux dans une chaîne mais je n'y arrive pas

    Le HTML:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	<h1>Vous cherchez une maison des services proche de chez vous?</h1>
    	<form method="POST">
    		<input id="search_field" type="search" name="search" size="50" placeholder="Votre commune (nom complet) ...">
    		<input id='submit' type="submit" name="submit" value="Valider">
    	</form>
    Le PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	$search = $_POST['search'];
     
    	$caracteres = ['a', 'Á' => 'a', 'Â' => 'a', 'Ä' => 'a', 'à' => 'a', 'á' => 'a', 'ä' => 'a',
    	'È' => 'e', 'É' => 'e', 'Ê' => 'e', 'Ë' => 'e', 'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e',
    	'Ì' => 'i', 'Í' => 'i', 'Î' => 'i', 'Ï' => 'i', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i',
    	'Ò' => 'o', 'Ó' => 'o', 'Ô' => 'o', 'Ö' => 'o', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'ö' => 'o',
    	'Ù' => 'u', 'Ú' => 'u', 'Û' => 'u', 'Ü' => 'u', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'u',
    	'Œ' => 'oe', 'œ' => 'oe'];
     
    $search = strtr($search, $caracteres);
    $search = preg_replace('##'.array_keys($caracteres).'##',array_values($caracteres), $search);
    $search = strtolower($search);
    echo($search);
    Toute aide est la bienvenue, je comprends pas vraiment l'utilité des délimiteurs non plus.

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    déjà il y a un petit soucis dans votre tableau, il y a un "a" tout seul au début, je suppose que c'est 'À' => 'a'

    ensuite avec le tableau de remplacement construit comme cela, je vous conseille d'utiliser la fonction http://php.net/str_replace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $caracteres = ['À' => 'a', 'Á' => 'a', 'Â' => 'a', 'Ä' => 'a', 'à' => 'a', 'á' => 'a', 'ä' => 'a',
    'È' => 'e', 'É' => 'e', 'Ê' => 'e', 'Ë' => 'e', 'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e',
    'Ì' => 'i', 'Í' => 'i', 'Î' => 'i', 'Ï' => 'i', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i',
    'Ò' => 'o', 'Ó' => 'o', 'Ô' => 'o', 'Ö' => 'o', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'ö' => 'o',
    'Ù' => 'u', 'Ú' => 'u', 'Û' => 'u', 'Ü' => 'u', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'u',
    'Œ' => 'oe', 'œ' => 'oe'];
     
    $chaine = "Je veux remplacer tous les caractères spéciaux par des caractères normaux dans une chaîne. Œ²€";
     
     
    $resultat = str_replace(array_keys($caracteres), array_values($caracteres), $chaine);
     
    echo $resultat;

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2017
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci de cette réponse rapide, du coup j'ai changé de tactique, vu que j'ai fait une auto-complétion en html, j'ai décidé de ne pas transformer les chaînes. Cela pourrait être perturbant pour les futures utilisateurs. M'ai je garde ce code sous la mains il peut être bien utile.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplacement des caractères spéciaux html
    Par duburov dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2010, 21h19
  2. problème d'affichage des caractères spéciaux avec la console Dos
    Par javass dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 14/05/2008, 17h58
  3. [Remplacer des caractères spéciaux en caractères normaux]
    Par metalamania dans le forum Général Python
    Réponses: 2
    Dernier message: 23/02/2007, 16h18
  4. Fonction qui remplace des caractères spéciaux
    Par ViRouF dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 07/08/2006, 10h24
  5. traitement des caractères spéciaux avec XSLT
    Par Mirgue dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 19/07/2004, 16h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo