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 :

Erreur PHP htmlspecialchars dans ma fonction [PHP 7]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Par défaut Erreur PHP htmlspecialchars dans ma fonction
    Bonjour,

    Après un passage à php 7 et + j'essaye de corriger certaines alertes et j'en une que j'arrive pas résoudre (après c'est certainement pas toujours le passage de php5 à 7..)

    Le message d'erreur est le suivant

    PHP Warning: htmlspecialchars() expects parameter 2 to be integer, string given in
    La ligne concernée est ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    				if (strlen($snippet.htmlspecialchars($match[0], 'UTF-8').".. ") > $strlen_max) break;
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    <?php
    // +------ Fonction pour rechercher les keywords dans le texte et les afficher selon une position  -------+	
     
    		function get_snippet($keywordsy, $texte) 
    		{
    			$snippet='';
    			$span = 140;
    			$strlen_max = 425;
     
    			$keywordsy = RemoveLess($keywordsy); // appel de la 1ère fonction
    			$keywordsy = preg_replace("#[\\\/:\*\?\(\)\%\&\+\#\"<>'\|]#ius", " ", $keywordsy) ; // Supprimer les caractères spéciaux
    			$keywordsy =  trim(preg_replace("#( [[:alnum:]]{1,3} )#Ui", " ", " ".$keywordsy." ")); // ne garde que + de 3 caractères et ajout d'un espace avant et après		
     
    			$texte = html_entity_decode("$texte", ENT_QUOTES); // Traiter le texte qui s'affiche selon les charsets
     
    			$words = join('|', explode(' ', preg_quote($keywordsy)));
     
    			preg_match_all("#(\W.{0,$span}\W)($words)(\W.{0,$span}\W)#ius", "  $texte  ", $matches);
     
    			foreach($matches[0] as $match) 
    			{
    				if (!$match = trim($match)) continue;
    				if (isset($snippet)) $snippet .= "$match.. "; else $snippet = "...$match...";
    				if (strlen($snippet.htmlspecialchars($match[0], 'UTF-8').".. ") > $strlen_max) break;
    			}
    				$snippet = preg_replace("#($words)#iu", '<b>$1</b>', $snippet);
    				return $snippet;
      		}
    ?>

    D'avance merci pour votre aide
    Cordialement
    Yule

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    C'est pourtant clair.
    Il suffit de lire la DOC.

  3. #3
    Membre éclairé
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Par défaut
    Bonjour,

    Ok me je ne vois toujours pas...

    vous parlez de cette page http://php.net/manual/fr/function.htmlspecialchars.php (La valeur par défaut pour le paramètre encoding a été modifiée pour être la valeur de l'option de configuration default_charset.)

    COrdialement
    Yule

    ps: Je ne demande pas d'aide si comprends.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Il manque le paramètre "flags".
    ENT_QUOTES par exemple.

    Sinon, tu n'es pas obligé de définir l'encodage : si ton site est en utf-8, alors ce sera l'encodage par defaut.

    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    htmlspecialchars($match[0], ENT_QUOTES, 'UTF-8')
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    htmlspecialchars($match[0])
    Avec, en tête de fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Type: text/html; charset=utf-8');

  5. #5
    Membre éclairé
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Par défaut
    Re,

    Ok merci d'avoir pris le temps d'ajouter vos exemples !

    Bon dimanche

    Yule

  6. #6
    Invité
    Invité(e)
    Par défaut
    Autre chose...

    1- strlen() : ne donnera pas le résultat correct avec des caractères multi-octets.

    Il faut utiliser les fonctions multi-octets mb_.....
    mb_strlen()


    2- quant à join(), c'est un alias de implode()
    Alors autant utiliser la fonction d'origine.

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

Discussions similaires

  1. Erreur "SELECT INTO" dans une fonction
    Par mercure07 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 20/02/2009, 11h34
  2. Réponses: 1
    Dernier message: 26/11/2008, 17h36
  3. Erreur d'argument dans une fonction
    Par rouliane dans le forum MATLAB
    Réponses: 6
    Dernier message: 12/12/2006, 11h52
  4. Erreur php session() dans error.log serveur
    Par JoN28fr dans le forum Langage
    Réponses: 3
    Dernier message: 30/05/2006, 21h34
  5. [8i][PL/SQL] erreur avec lpad dans une fonction
    Par sali dans le forum Oracle
    Réponses: 3
    Dernier message: 16/03/2006, 06h22

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