FAQ PHP
FAQ PHPConsultez toutes les FAQ
Nombre d'auteurs : 68, nombre de questions : 580, dernière mise à jour : 18 septembre 2021
- Comment ajouter/supprimer les antislashes surnuméraires ?
- Comment coloriser le code source d'un script ?
- Comment compléter une chaîne de caractères avec une autre chaîne ?
- Comment concaténer des chaînes des caractères ?
- Comment convertir une chaîne de caractères en nombre ?
- Comment couper une chaîne de caractères trop longue ?
- Comment enlever les balises (X)HTML/PHP dans une chaîne ?
- Comment extraire une partie d'une chaîne de caractères ?
- Comment insérer une chaîne de caractères dans une autre tous les x caractères ?
- Comment morceller une chaîne ?
- Comment remplacer les retours à la ligne (\\n) par la balise HTML <BR/>?
- Comment remplacer/supprimer un mot/caractère dans une chaîne ?
- Comment savoir si une chaîne est incluse dans une autre ?
- Comment supprimer les espaces d'une chaîne ?
- Comment surligner une chaîne ?
- Conversion d'une chaîne en minuscules/majuscules
- Pourquoi ma variable n'est pas interprétée dans une chaine ?
La fonction addslashes() ajoute des antislashes surnuméraires dans une chaîne. Par exemple : transforme "'" en "\'".
Exemple :
$texte
=
"
L'utilisation de addslashes
"
;
echo addslashes($texte
);
//Affiche L\'utilisation de addslashes
La fonction stripslashes() supprime les antislashes surnuméraires. Par exemple : transforme "\\" en "\".
Exemple :
echo stripslashes($_POST
[
'
texte
'
]
);
Pour cela il suffit d'utiliser la fonction highlight_file($file) ou son alias show_source($file) qui affiche à l'écran le contenu du fichier $fichier en ayant colorisé le code source PHP.
On peut faire de même avec une chaîne de caractères via highlight_string($str [, $test]) qui affiche la chaîne $str colorisée, et retourne true ou false si le traitement s'est ou non bien passé. Si l'argument optionnel $test est à true, alors la chaîne colorisée n'est pas affichée à l'écran mais retournée.
Le fichier de configuration php.ini définit les couleurs de colorisation comme suit :
highlight.string = #DD0000
highlight.comment = #FF8000
highlight.keyword = #007700
highlight.bg = #FFFFFF
highlight.default = #0000BB
highlight.html = #000000
Pour compléter une chaîne de caractères jusqu'à une taille précise, il faut utiliser la fonction str_pad() qui retourne une chaîne complétée à droite, à gauche ou dans les deux sens, avec la chaîne passée en paramètre jusqu'à ce qu'elle atteigne une taille donnée.
Syntaxe :
string str_pad(string chaine,
int longueur,
string chaine_a_inserer,
int type_ajout)
type_ajout correspond au type suivant :
- STR_PAD_RIGHT : uniquement à droite
- STR_PAD_LEFT : uniquement à gauche
- STR_PAD_BOTH : à gauche et à droite
Exemple :
$chaine
=
"
TEST
"
;
echo str_pad($chaine
,
10
);
//Affiche TEST avec que des espaces à la fin
echo str_pad($chaine
,
10
,
"
++
"
);
//Affiche TEST++++++
echo str_pad($chaine
,
10
,
"
++
"
,
STR_PAD_LEFT);
//Affiche ++++++TEST
echo str_pad($chaine
,
10
,
"
++
"
,
STR_PAD_RIGHT);
//Affiche TEST++++++
echo str_pad($chaine
,
10
,
"
++
"
,
STR_PAD_BOTH);
//Affiche +++TEST+++
L'opérateur point ( . ) (équivalent du + du Java) permet de concaténer deux chaînes de caractères. Au besoin, PHP procède au cast implicite des variables non chaînes de caractères.
Syntaxe :
$chaine
=
$chaine
.
$str
;
$chaine
.=
$str
;
Ces deux syntaxes sont équivalentes.
Exemples :
echo "
Bonjour
"
.
$nom
;
$str
.=
$toto
;
$adresse
=
$num
.
$rue
.
$cp
.
$ville
;
Les fonctions intval(),
floatval()
(ou doubleval)
permettent de convertir, respectivement, une chaîne en un
nombre entier et à virgule flottante.
Exemple d'utilisation :
$chaine
=
'
5
'
;
echo $nombre
=
intval($chaine
) +
2
;
echo '
<br />
'
;
echo $nombre
=
(int)
$chaine
+
2
;
echo '
<br /><br />
'
;
$chaine
=
'
5.532
'
;
echo $nombre
=
floatval($chaine
) +
2
;
echo '
<br />
'
;
echo $nombre
=
(float)
$chaine
+
2
;
echo '
<br /><br />
'
;
Rappel : Les variables PHP ont un type dynamique. Et donc on peut se passer de ces fonctions pour effectuer des calculs. Mais l'utilisation de ces fonctions, pour effectuer un cast, peut s'avérer utile.
Dans certains cas, on souhaite limiter le nombre de caractères
d'une chaîne trop longue, en la coupant.
Pour ce faire, on peut utiliser le code suivant :
//$str est la chaîne de caractères et $nb le nombre de caractères maximum à afficher.
function tronque($str
,
$nb
=
150
)
{
// Si le nombre de caractères présents dans la chaine est supérieur au nombre
// maximum, alors on découpe la chaine au nombre de caractères
if (strlen($str
) >
$nb
)
{
$str
=
substr($str
,
0
,
$nb
);
$position_espace
=
strrpos($str
,
"
"
);
//on récupère l'emplacement du dernier espace dans la chaine, pour ne pas découper un mot.
$texte
=
substr($str
,
0
,
$position_espace
);
//on redécoupe à la fin du dernier mot
$str
=
$str
.
"
...
"
;
//puis on rajoute des ...
}
return $str
;
//on retourne la variable modifiée
}
La fonction strip_tags() est ici d'une grande utilité. Elle supprime toute balise PHP ou (X)HTML. Elle peut prendre un deuxième paramètre, qui indique alors les balises qui sont autorisées.
$chaine
=
"
<p>Voici une <br/> chaîne <b>de test</b> <!-- et un commentaire --></p>
"
;
echo strip_tags($chaine
);
// Voici une chaîne de test
echo strip_tags($chaine
,
'
<br/>
'
);
// Voici une <br/> chaîne de test
La fonction substr($str, $debut, $taille) retourne une sous-chaîne de la chaîne d'origine $str par recopie de $taille caractères à partir de la position $debut+1.
Exemple :
À cet effet, la fonction wordwrap() peut être d'un grand secours sans devoir utiliser d'expression régulière. Cette fonction retourne la chaîne initiale avec, intercalée après un certain nombre de caractères, une autre chaîne. Par défaut, elle n'insérera pas de chaîne en plein milieu d'un mot, à moins que cela soit explicitement demandé.
$string
=
'
Les chaussettes de l
\'
archi-duchesse, sont-elles sèches ou archi-sèches ?
'
;
echo wordwrap($string
,
2
,
'
<br/>
'
);
// Les<br/>chaussettes<br/>de<br/>l'archi-duchesse,<br/>sont-elles<br/>sèches<br/>ou<br/>archi-sèches<br/>?
echo wordwrap($string
,
2
,
'
<br/>
'
,
true);
// Le<br/>s<br/>ch<br/>au<br/>ss<br/>et<...
La fonction explode($delim, $str) permet de scinder la chaîne $str en une multitude de sous-chaînes qui composeront le tableau retourné par la fonction. Les sous-chaînes sont délimitées par le séparateur $delim dans la chaîne $str.
Exemple :
Ainsi le tableau $tab contient 5 éléments.
Il faut se servir de la fonction nl2br() comme suit :
$chaineAvecBR
=
nl2br($chaineSansBR
);
Difficile de faire plus simple.
Il existe plusieurs méthodes pour réaliser cette opération, mais la plus courante est l'utlisation de la fonction str_replace() qui remplace/enlève toutes les occurrences toutes les occurrences d'une chaîne dans la chaîne voulue.
Exemples :
$var
=
"
Ici c'est la FAQ HTML
"
;
//Chaîne initiale
$toreplace
=
'
HTML
'
;
//Chaîne à remplacer
$remplacement
=
'
PHP
'
;
//Chaîne de remplacement
$var
=
str_replace($toreplace
,
$remplacement
,
$var
);
echo $var
;
//Affiche Ici c'est la FAQ PHP
$var
=
'
Jean-Michel
'
;
//Chaîne initiale
$var
=
str_replace('
-
'
,
''
,
$var
);
//Supprime tous les -
Lien : Comment enlever un caractère/ensemble de caractères d'une chaîne ?
Pour savoir si une chaîne en contient une autre, on utilise
la fonction strpos()
qui retourne la position numérique de la première occurrence
de la chaîne de caractères.
Exemple d'utilisation :
$str1
=
"
abcdef
"
;
$str2
=
"
cde
"
;
//Affiche 2, donc $str2 est dans $str1.
if(strpos($str1
,
$str2
) !==
FALSE)
{
echo $str1
.
'
contient
'
.
$str2
;
}
$str1
=
"
abcdef
"
;
$str2
=
"
CDE
"
;
//Affiche rien car strpos est sensible à la casse.
if(strpos($str1
,
$str2
) !==
FALSE)
{
echo $str1
.
'
contient
'
.
$str2
;
}
- ltrim($str) : retourne la chaîne $str sans ses espaces de début
- rtrim($str) : retourne la chaîne $str sans ses espaces de fin
- trim($str) : retourne la chaîne $str sans ses espaces de début et de fin
- " " (ASCII 32 (0x20)), un espace ordinaire
- " " (ASCII 9 (0x09)), une tabulation
- "\n" (ASCII 10 (0x0A)), une nouvelle ligne (line feed)
- "\r" (ASCII 13 (0x0D)), un retour chariot (carriage return)
- "\0" (ASCII 0 (0x00)), le caractère NUL
- "\x0B" (ASCII 11 (0x0B)), une tabulation verticale.
Un second argument optionnel permet d'imposer la liste des caractères à supprimer. Exemple qui supprime toutes les voyelles :
À noter que cette plage de caractères peut être un intervalle défini avec ".."
Les expressions régulières permettent facilement ce genre de traitement via les parenthèses capturantes.
function surligne($str
,
$query
) {
return eregi_replace("
(
$query
)
"
,
"
<b style=
\"
background-color:yellow;
\"
>
\\
1</b>
"
,
$str
);
}
Cette fonction surligne (et met en gras) la sous-chaîne $query de la chaîne $str.
Ici on remplace toute sous-chaîne de $str vérifiant le motif défini par $query par une autre chaîne comportant la mise en forme et la sous-chaîne trouvée.
- strtoupper() convertit une chaîne en majuscules
- strtolower() convertit une chaîne en minuscules
- ucfirst() convertit le premier caractère d'une chaîne en majuscule
- ucwords() convertit le premier caractère de chaque mot d'une chaîne en majuscule
$str
=
"
Bonjour à tous !
"
;
echo strtoupper($str
);
// affiche "BONJOUR A TOUS !"
echo strtolower($str
);
// affiche "bonjour à tous !"
echo ucwords($str
);
// affiche "Bonjour A Tous!"
Attention, les caractères accentués ne sont pas toujours passés en majuscules, car cela dépend de la configuration locale du serveur.
Vous avez écrit ce qui suit et l'affichage n'est pas celui attendu
$variable
=
'
valeur
'
;
echo '
chaine $variable
'
;
// affiche : chaine $variable
Vous attendiez chaine valeur. L'explication est très simple : les variables ne sont pas interprétées dans les chaines entre simple quotes.
Vous avez donc trois solutions :
1) La concaténation
$variable
=
'
valeur
'
;
echo '
chaine
'
.
$variable
;
// affiche : chaine valeur
2) Utiliser des doubles quotes (guillemets).
Les variables sont interprétées dans les chaînes entre double quotes, mais ce n'est pas recommandé d'un point de vue performances. Si l'on utilise quand même des variables dans des chaînes entre double quotes, les entrées de tableaux doivent être entourés d'accolades et il n'est pas possible d'utiliser les membres d'objets ($obj->machin).
$variable
=
'
valeur
'
;
echo "
chaine
$variable
"
;
// affiche : chaine valeur
$tableau
[
'
cle
'
]
=
'
valeur2
'
;
echo "
test
{
$tableau
[
'cle'
]
}
"
;
// affiche : test valeur2
3) La troisième solution est l'utilisation de la syntaxe HereDoc
$variable
=
'
valeur
'
;
echo <<<identifiant
chaine
$variable
identifiant;