2010-01-22 6 views
3

Si je recherche tOm ArNfElD et que le $variable est "Tom Arnfeld", j'obtiens des résultats excellents sous forme de LIKE dans MySQL (qui est insensible à la casse).Envelopper le texte - insensible à la casse avec php

Comment est-ce que je pourrais envelopper le texte apparié dans le $variable avec un <span></span> pour souligner à quelle partie de la recherche a correspondu à la question? Je dois conserver le cas original du $variable.

Répondre

1
$textToPrint = preg_replace("/({$variable})/i","<span class"myclass">$1</span>,$text); 

cela pourrait aider

+0

grrr ... quelqu'un d'autre le poster d'abord pendant que j'écrivais la réponse – Andreas

+0

fonctionne parfaitement !! – tarnfeld

+0

Ceci est potentiellement faux, vous n'échappez pas (en utilisant 'preg_quote()') le '$ variable'. –

0

Vous pouvez utiliser str_ireplace() si vous voulez remplacer toute la chaîne ou convertir vos LIKE-paramètre à une expression régulière et utiliser preg_replace() (ne pas oublier de preg_quote() la chaîne, cependant).

Exemple en utilisant des expressions régulières:

$parts = explode('%', $likeQuery) 
foreach ($parts as &$innerString) { 
    $innerParts = explode('_', $innerString); 
    foreach ($innerParts as &$part) { 
     $part = preg_quote($part, '/'); 
    } 
    // always unset references when you're done with them 
    unset($part): 
    $innerString = implode('.', $innerString); 
} 
// always unset references when you're done with them 
unset($innerString): 
$regex = implode('.*?', $parts); 
$transformedString = preg_replace("/$regex/", '<span>$0</span>', $stringToTransform); 
1

J'utiliser des expressions régulières:

$text = preg_replace('~(' . preg_quote($search, '~') . ')~i', '<span>$1</span>', $text); 

Il y a d'autres façons aussi, comme celui soulmerge suggested (str_ireplace()):

$text = str_ireplace($search, '<span>' . $search . '</span>', $text);