Edzins Posted October 14, 2010 Report Share Posted October 14, 2010 Labdien! Problēma ar unicode UTF-8 un paša "izgudrotu" tādu kā "highlight searched word" skriptu, nedaudz par tā uzbūvi.. Datubāzes uzbūve: collation utf8_general_ci, charset utf8, lauki - longtext Ja tiek meklēti ieraksti pēc LIKE '%abece%', tad tiek atlasīti sekojoši ieraksti: $r["str"] = "ābēce rullē"; $r["str"] = "abece nerulle"; kas ir pat supper :) bet problēma rodas ar rezultāta izcelšanas skriptu izmantojot preg_replace: $hlw = 'abece'; $str = preg_replace('/'.$hlw.'/u', '<span class="hw">'.$hlw.'</span>', $r["str"]); proti, netiek "izcelts" pirmais ieraksts "ābece rullē" ar otro viss protams ir ok "<span class="hw">abece</span> nerulle" Kāds varētu būt risinājums, lai tiktu ar izcelti ieraksti, kur ir arī LV burti, bet ne vaicājums sastāv no latīņu alfabēta burtiem? Ceru, ka izdevās izskaidrot problēmu, Paldies jau iepriekš, Edgars Quote Link to comment Share on other sites More sharing options...
Леший Posted October 14, 2010 Report Share Posted October 14, 2010 (edited) mb_ereg_replace ir deprecated, un nav īsti tas, kas vajadzīgs. Paprovē darīt tā: 1. Sameklējam teksta gabalus, kas atbilst kriterijam, ierakstam masīvā, piemēram array(0=>'ābēce', 1=>'abece'); 2. Samainam tos tekstus ar %1$s, %2$s utt. 3. Katru %1$s, %2$s utt aizvietojam ar <span ...>%1$s</span> utt. 4. ar vsprintf() saliekam atpakaļ vārdus. Edited October 14, 2010 by Леший Quote Link to comment Share on other sites More sharing options...
Edzins Posted October 14, 2010 Author Report Share Posted October 14, 2010 2. Samainam tos tekstus ar %1$s, %2$s utt. kā tieši (ar kā palīdzību) biji domājis samainīt? buros cauri vsprint() funkcijai, bet tā ar nespēju izprast... biki pietrūkst prātiņa :) Quote Link to comment Share on other sites More sharing options...
Леший Posted October 14, 2010 Report Share Posted October 14, 2010 vsprintf() atšķirās no diezgan labi dokumentēta sprintf() ar to, ka vsprintf() gadījumā mainīgie ir apvienoti masīvā. Quote Link to comment Share on other sites More sharing options...
Klez Posted October 14, 2010 Report Share Posted October 14, 2010 buutu googles tantei pajautājis un atradis ātri vien atbildi :) http://www.phpro.org/articles/Highlight-Search-Words.html http://www.google.com/webhp?complete=1&hl=en&q=goo#sclient=psy&hl=en&complete=1&site=webhp&q=php+highlight+search&aq=f&aqi=g1&aql=&oq=&gs_rfai=&pbx=1&fp=a29c82155c57878e Quote Link to comment Share on other sites More sharing options...
Edzins Posted October 14, 2010 Author Report Share Posted October 14, 2010 buutu googles tantei pajautājis un atradis ātri vien atbildi :) http://www.phpro.org/articles/Highlight-Search-Words.html http://www.google.com/webhp?complete=1&hl=en&q=goo#sclient=psy&hl=en&complete=1&site=webhp&q=php+highlight+search&aq=f&aqi=g1&aql=&oq=&gs_rfai=&pbx=1&fp=a29c82155c57878e ar tjotju google pastāvīgi uzturam sakarus :), bet problēma jau ir tajā ka MYSQL atlasa abus variantus (gan a garumzīmēm, gan bez), bet ar preg_replace var iezīmēt tikai tieši to meklējamo vārdu (vai nu ar garumzīmēm, vai bez). Cenšos "izpīpēt" kā varētu iezīmēt abus variantus, piemēram, ja meklē pēc "abece", ir <span class="hw">abece</span>, gan <span class="hw">ābēce</span> Quote Link to comment Share on other sites More sharing options...
v3rb0 Posted October 15, 2010 Report Share Posted October 15, 2010 Ja vajag, var jau iet ķēpīgo ceļu. Repleicošanai meklētais 'abēce' jāpārtaisa par kaut ko kā '[aāä]b[eē][cč][eē]' tb definē "līdzīgo" (diakritisko?) burtu grupas. Tad ar katru meklētā vārda burtu- ja burts ir kāds no burtu grupas i, tad burtu aizstāj ar '['.implode('',$burtuGrupa[$i]).']'. +vēl vajag eskeipot simbolus, kuriem regex ir speciāla nozīme - . | ( ) { } [ ] utt. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.