Jump to content
php.lv forumi

Meklējamā vārda izcelšana tekstā


Edzins

Recommended Posts

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

Link to comment
Share on other sites

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 by Леший
Link to comment
Share on other sites

 

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>

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...