[PHP/SQL] Case-Sensitivity

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het probleem is als volgt:

Er is een database die prima aangesproken kan worden en de search en alles werkt prima. Het probleem is alleen dat de woorden waar naar gezocht is bijvoorbeeld vetgedrukt moeten worden.
Dus als ik zoek naar 'Pietje' moet de output worden "Pietje in de dierentuin". Dit gaat prima zolang ik inderdaad zoek naar 'Pietje'. Als ik echter ga zoeken naar 'pietje' (kleine 'p' voor de snelle lezers die hier overheen kijken ;)) komt er als output "Pietje in de dierentuin" (omdat 'pietje' in die case niet gevonden is!) Hoe, o hoe moet ik dit doen. eregi_replace heb ik al geprobeerd, maar dan wordt alles klein. Dus de gehele output moet in dezelfde case blijven en de woorden die ik zoek moeten gematcht worden. Ik heb ff geen idee hoe k dit zou kunnen doen...

Thanx in advance!

Acties:
  • 0 Henk 'm!

  • Dryw.Filtiarn
  • Registratie: September 2001
  • Laatst online: 08-09-2022
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
$document = "Pietje in de dierentuin";

$lookfor = "Pietje";

$search = array ("'$lookfor'" );
$replace = array ("<b>$lookfor</b>");
$text = preg_replace ($search, $replace, $document);

echo $text;
?>

Probeer deze maar eens, die doet het als het goed is prima

=( Protected by witchcraft )=


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Prima antwoord, maar dan heb ik nog steeds geen case-insensitive search. Met eregi_replace heb je dat wel, maar het resultaat daarvan is weer dat het result volledig lcase is, en dat wil ik niet. Ik wil gewoon de originele case houden...

Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 06-09 02:30

dusty

Celebrate Life!

code:
1
select selectiekolommen from tabelnaampje where ucase("Pietje")=ucase(kolomnaam)

;)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
voor de mensen die het nog willen weten, dit bedoelde ik :)
(wel ff goed lezen, dan snap je het wel neem ik aan ;) )
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?
    function benadrukGezochteWoorden($text, &amp;$woorden, $pre, $post)
    {
        $textlower = strtolower($text);
        
        for ($teller=0; $teller<count(&amp;$woorden); $teller++)
        {
            $tmp = strtolower(&amp;$woorden[$teller]);
            for ($teller2=0; $teller2<strlen($text)-strlen($tmp)+1; $teller2++)
            {
                if (substr($textlower, $teller2, strlen($tmp)) == $tmp)
                {
                    $temp = substr($text, $teller2, strlen($tmp));
                    $from[] = $temp;
                    $to[] = $pre.$temp.$post;
        }}}
        
        for ($teller=0; $teller<count($from); $teller++)
        {
            $fromnow = $from[$teller];
            $tonow = $to[$teller];
            $text = ereg_replace ($fromnow, $tonow, $text);
        }
        
        return $text;
    }
?>

Acties:
  • 0 Henk 'm!

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 11-08 18:10

Goodielover

Only The Best is Good Enough.

Globale aanpak lijkt me te kloppen.

In pseudo code mijn oplossing:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
zet tekst om naar kleine letters (alleen om in te zoeken)
voor elk woord doe:
  zet woord om naar kleine letters
  voor elke regel in tekst doe:
    zet startpositie in regel op 0
    zoek in regel uit zoektekst naar woord
    zolang woord gevonden
    voeg in tekst op die pos+lengte(zoekwoord) een post-code in
    voeg in tekst op die pos een pre code in
    voeg in zoektekst op die pos+lengte(zoekwoord) een post-code in
    voeg in zoektekst op die pos een pre code in
    zet startpositie in regel op positiewoord+lengte(zoekwoord)+lengte(pre-code)+lengte(post-code)
    zoek naar volgende voorkomen vanaf startpositie in regel
    eind zolang
  eind doe
eind doe

je verandert dus zowel de zoektekst als de orginele tekst, dan weet je zeker dat de posities blijven kloppen.
suc6

Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 06-09 02:30

dusty

Celebrate Life!

Op maandag 17 december 2001 00:40 schreef SICdude het volgende:
voor de mensen die het nog willen weten, dit bedoelde ik :)
(wel ff goed lezen, dan snap je het wel neem ik aan ;) )
Als ik het goed lees, lees ik dat de oplossing die je hebt gemaakt wel werkt, maar niet effectief is. i.e. er is een betere oplossing. Je hebt daarbij maar EEN for lus nodig.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 11-08 18:10

Goodielover

Only The Best is Good Enough.

Lees mijn oplossing eens. Dus lus voor regels uit een tekst kan mogelijk worden wegegelaten als de hele tekst in 1 lang veld staat.
Jouw (Dusty) vraag over wat zijn probleem is lijkt correct.
Zoeken met een woord naar het woord maar dan met andere case levert geen vette tekst op
Pagina: 1