strcspn
strcspn($string, $characters, $offset, $length)
Renvoie la longueur de la partie initiale du texte qui ne contient aucun des caractères du masque – autrement dit la position du premier de ces caractères. Si le texte n’en contient aucun, elle renvoie la longueur du texte entier.
Paramètres
- $string – texte examiné.
- $characters – caractères recherchés. L’occurrence de n’importe lequel suffit.
- $offset – facultatif, position à partir de laquelle on cherche. Une valeur négative compte depuis la fin.
- $length – facultatif, combien de caractères examiner au plus. Une valeur négative signifie « jusqu’à autant de caractères avant la fin ».
Exemples
// longueur de la partie avant le premier « @ »
echo strcspn("anne@example.com", "@"); // 4
// partie avant le premier de plusieurs séparateurs possibles
$row = "couleur=bleu;taille=XL";
echo substr($row, 0, strcspn($row, "=;")); // couleur
// si le texte ne contient aucun caractère du masque, elle renvoie la longueur du texte entier
echo strcspn("abc", "xyz"); // 3
// à partir de la position 5
echo strcspn("anne@example.com", ".", 5); // 7
// le texte contient-il un retour à la ligne ? (vérification d'une valeur pour un en-tête d'e-mail)
$subject = "Question\r\nBcc: other@example.com";
var_dump(strcspn($subject, "\r\n") === strlen($subject)); // bool(false)
Points d’attention
- Avec $offset, le résultat est la longueur depuis la position $offset, pas la position dans le texte entier.
- Elle travaille sur les octets. Une lettre accentuée dans le masque se divise en octets isolés, qui peuvent aussi correspondre à d’autres lettres.
- Les valeurs des visiteurs qui finissent dans des en-têtes (objet d’un e-mail, nom de l’expéditeur) ne doivent contenir ni \r ni \n. Sinon, on pourrait injecter d’autres en-têtes dans le message.
Fonctions associées :
strspn()
strpos()
strpbrk()
strtok()
mail()