2010-01-22 7 views
1

Je construis une recherche qui enveloppera le texte recherché avec une étiquette <span> et j'ai le code de travail ok:Conserver le cas lors de l'utilisation de str_ireplace?

str_ireplace($q,'<span>'.$q.'</span>',$row[name]); 

Le problème est, si un utilisateur recherche pour Tom est montrera Tom qui est cool, mais s'ils mettent tom à cause du str_ireplace cela montrerait tom, est-ce que cela a du sens? Le vrai problème est que si quelqu'un entrait tOm aRnFeLd bien qu'il chercherait ok, l'esthétique apparaîtrait sur la page tOm aRnFeLd

Comment puis-je conserver les majuscules et les minuscules des deux chaînes? Existe-t-il un meilleur moyen d'envelopper le texte insensible à la casse d'une chaîne?

Répondre

0

utilisation stristr pour obtenir l'aiguille de la botte de foin, insensible à la casse

$keyword_caseRetained_all = stristr($excerpt, $keyword); 

mais qui retourne l'aiguille et le reste de la botte de foin aussi, donc vous devez utiliser substr pour ne garder que la partie de l'aiguille. commencer à la position 0, levez-vous à la longueur du mot-clé

$keyword_caseRetained = substr($keyword_caseRetained_all, 0, strlen($keyword)); 

utilisent maintenant cette variable dans la fonction str_ireplace

$excerpt = str_ireplace($keyword, '<em>'.$keyword_caseRetained.'</em>', $excerpt); 

une fois que vous savez cela, vous pouvez combiner les lignes 1 et 2 dans un joli rats imbriquer pour raccourcir votre code.

ou de l'ajouter comme méthode à une classe de manipulation de chaînes.

0
  1. Obtenez phrase longueur strlen()
  2. occurrence Recherche de phrase en utilisant stripos()
  3. Insérer dans le texte <span> après le caractère N de texte (où N est le résultat du point # 2)
  4. Insérer dans le texte </span> après N du texte + M caractère (où N est le résultat du point n ° 2 et M est le résultat du point n ° 1)
  5. Continuer les points 2-4 (en utilisant le troisième paramètre de strpos() - offset)
Questions connexes