Case insensitive iskanje
4 naročniki
4 naročniki
Zdravo,
Imam eno zanimivo težavo...
na strani imam dinamični iskalnik, ki išče po imenu izdelka/dobavitelja in sproti obarva iskalni izraz v tekstu, recimo iščeš "Pivo", rezultat je pa naprimer "PIVOVARNA.
Načeloma deluje enako če iščem z velikimi ali malimi črkami, v vsakem primeru mi lepo obarva iskalni string, težava pa nastopi pri posebnih znakih, torej č,ž,š...Tukaj pa kot da ločuje velike in male črke...
Pa imam v tabeli nastavljeno utf8generalci in tudi v kodi ni ničesar takega...
Se komu sanja kaj narediti?
6 odgovorov
V bistvu je pri jquery pluginu za ajax search regex brez i, kar pomeni da je case sensitive, rešitev je gi ... primer: http://jsfiddle.net/cww6zf5r/. Poizkušaj iskat del, ki je tam v besedilu, prva vrstica je z i, druga pa brez.
Hvala za pomoč...
Sama menjava barve teksta se zgodi v php-ju in sicer takole:
$query = $db->query("SELECT * FROM cscart_product_descriptions WHERE UPPER(firma) LIKE '%$queryString%' AND status='A' LIMIT 15");
if($query) {
// While there are results loop through them - fetching an Object (i like PHP5 btw!).
while ($result = $query ->fetch_object())
{
// Format the results, im using <li> for the list, you can change it.
// The onClick function fills the textbox with the result.
$izdelek = $result->product;
$p_id = $result->product_id;
$firma = $result->firma;
$slika = $result->slika;
$firma = str_replace("/*/","<br>",$firma);
$display = preg_replace("@".$queryString."@i", "<span style='color:#F4A443;'><b>".$queryString."</b></span>", $firma);
echo '<a id="opener_product_picker_'.$p_id.'" class="iskanje_izdelek" rev="product_quick_view_'.$p_id.'" href="/index.php?dispatch=products.quick_view&product_id='.$p_id.'&prev_url=">
<li onClick="fill(\''.$display.'\');">
<table>
<td>
<img style="border: 1px dashed #777777; border-radius: 3px;" src="'.$slika.'"> </td><td>'.$display.'</td></table></li></a>';
}
Očitno je potem težava tukaj...ali pa česa ne razumem...
lp
mislim, da v tvojem primeru ni potrebe po regex, tako da lahko mirno uporabiš navaden case insensitive replace
$display = str_ireplace($queryString, "<b style='color:#F4A443;'>".$queryString."</b>", $firma);
...ali pa poskušaj z mberegireplace