2014-07-02 4 views
1

Je suis couper une chaîne dans un extrait comme suit:Pourquoi strpos() retourne une erreur?

$mod_trim_to = strpos(get_the_excerpt(), ' ', 115); 
$trimmed_exceprt = substr(get_the_excerpt(),0,$mod_trim_to); 

Le but ici est de couper l'extrait à 115 caractères dans les cas où il est généré automatiquement et briser les limites d'un très petit espace, comme spécifié par le graphiste tiers.

La fonction retourne correctement, mais lance aussi un avertissement:

PHP Warning: strpos(): Offset not contained in string 

Je ne peux deviner que strpos() n'aime pas la recherche d'un espace? Quelle est la bonne façon d'écrire ceci afin que je ne finis pas avec un journal des erreurs?

Merci

+8

http://php.net/manual /en/function.strpos.php#93816 En d'autres termes, si la chaîne est plus courte que le décalage spécifié, vous recevrez un avertissement. –

+0

^Cela et aussi il devrait être quelque chose comme 'strpos (get_the_excerpt(), '', 115);' – Darren

+0

Utilisez une variable pour identifier votre valeur de décalage, vérifiez d'abord la longueur de la chaîne en question et comparez-la à votre variable offset , si la chaîne est trop petite, n'exécutez pas. – Ohgodwhy

Répondre

2

Exemple complet avec les recommandations Sverri M. Olsen:

$maxLength = 115; 
$excerpt = get_the_excerpt(); 

if (strlen($string) > $maxLength) { 
    $modTrimTo = strpos($excerpt, ' ', $maxLength); 
    $trimmedExcerpt = substr($excerpt, 0, $modTrimTo); 
} else { 
    $trimmedExcerpt = $excerpt; 
} 

Mais attention: si vous avez utf8 extraits codés, utilisez ceci:

strlen(utf8_decode($excerpt)); 

ou ceci:

mb_strlen($excerpt, 'UTF-8') 
+0

Deux petites modifications: if (! Vide ($ extrait) && strlen ($ excerpt)> $ maxLength) { – Imperative

+0

Aussi, si quelqu'un se trouve en utilisant ceci - PREFIX YOUR VARS =) – Imperative

Questions connexes