[PHP] Laat die source met rust!!!

Pagina: 1
Acties:

  • OVERLORD_1982
  • Registratie: Juni 2001
  • Laatst online: 23-08 07:00
Ik heb een probleempie, ik heb op m'n werk een update gedaan op de search engine. Dit naar aanleiding van die geile kleurtjes hier op GOT.

Het lukt allemaal redelijk, maar als je op meerdere woorden zoekt, en niet het eerste, maar vanaf het tweede woord kan er een probleempie ontstaan.
Als het tweede woord iets van de source code bevat die het woord gaat vervangen, dan kleurt i het eerste woord niet, en komt de source door in de result.

Laat me ff de source hier neer pleuren :)

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
28
<?
$numzoek = count($zoeksplits);

IF ($numzoek == 1 AND $zoeksplits[0] == "")
{
    $docshow = $docnaam;
}

ELSEIF ($numzoek == 1 AND $zoeksplits[0] != "")
{
    $docshow = eregi_replace($zoeksplits[0], "<span style=\"background-color: #FFFF00\">\\0</span>", $docshow);
}

ELSE
{
$kleur[0]="#FFFF00";
$kleur[1]="#00FF00";
$kleur[2]="#FF00FF";
$kleur[3]="#0000FF";

$i=0;
    WHILE($i < $numzoek)
    {
    $docshow = eregi_replace($zoeksplits[$i], "<span style=\"background-color: $kleur[$i]\">\\0</span>", $docshow);
    $i++;
    }
}
?>


Het gaat dus fout in regel 24 vanaf de tweede keer dat die loop gaat lopen.
Ziet iemand een fout???

edit:

BTW dit is een alleen het gedeelte dat de rusult kleurt, en is een include van de hoofdresult pagina.

[ Voor 0% gewijzigd door OVERLORD_1982 op 06-09-2002 11:44 . Reden: Extra info ]


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

daar mag je wel een visueel voorbeeldje van maken
snap er nix van wat er nou misgaat

Doet iets met Cloud (MS/IBM)


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Ik snap je probleem niet.

https://fgheysels.github.io/


  • OVERLORD_1982
  • Registratie: Juni 2001
  • Laatst online: 23-08 07:00
Hold on, maak ff wat pics voor jullie :)

  • Expander
  • Registratie: Februari 2001
  • Niet online
Het lijkt me iets met escapen te maken te hebben ofzo. Ff kijken...
PHP:
1
\"background-color: $kleur[$i]\"

Is dat het niet? Daar begint GoT namelijk ook anders te kleuren dan in de gelijksoortige regel erboven..

Expanding the inexpandable


  • OVERLORD_1982
  • Registratie: Juni 2001
  • Laatst online: 23-08 07:00
Lijkt me niet, je moet die dubbele quotes binnen dubbele qoutes escapen.

  • OVERLORD_1982
  • Registratie: Juni 2001
  • Laatst online: 23-08 07:00
De pics :)

goede zoekopdracht
Afbeeldingslocatie: http://www.xs4all.nl/~rladage/images/zoekgoed.JPG
Het resultaat daarbij
Afbeeldingslocatie: http://www.xs4all.nl/~rladage/images/zoekresultaatgoed.JPG
Foute zoekopdracht
Afbeeldingslocatie: http://www.xs4all.nl/~rladage/images/zoekfout.JPG
Het resultaat daarbij
Afbeeldingslocatie: http://www.xs4all.nl/~rladage/images/zoekresultaatfout.JPG

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:12

Creepy

Tactical Espionage Splatterer

Eeehh.. dit lijkt toch goed te werken zo?? De gezochte termen worden gekleurd... wat is nou het probleem?
Edit: zo dan.. ik ben al lekker wakker!!!! Bij de tweede zoekopdracht word dus het eerst gezochte woord niet gekleurd... hmm.....

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • OVERLORD_1982
  • Registratie: Juni 2001
  • Laatst online: 23-08 07:00
Het eerste woord wordt niet gekleurd + hij gooit de HTML source er door heen. kijk naar FFFF00"> die hoort er natuurlijk niet in :(

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Ik zou er een str_replace van maken...

PHP:
1
2
$replace = ("<span style=\"background-color:".$kleur[$i]."\">".$zoeksplits[$i]."</span>");
$docshow = str_replace ($zoeksplits[$i],$replace ,$docshow);

Sundown Circus


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:12

Creepy

Tactical Espionage Splatterer

Hmm... de eerste keer wordt dat eerste woord vervangen door die span met die color, en de tweede keer wordt die span ook meegenomen in je replace, en zal hij daar ook in gaan highlighten. Met als resultaat dat als je op ff zoekt en je een color hebt met ff erin ($FFFF00) dat er een nieuwe span in die color komt te staan.

Je zal dus een manier moeten verzinnen om niet te zoeken in die spans of om op een andere manier te vervangen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Creepy schreef op 06 september 2002 @ 12:47:
Hmm... de eerste keer wordt dat eerste woord vervangen door die span met die color, en de tweede keer wordt die span ook meegenomen in je replace, en zal hij daar ook in gaan highlighten. Met als resultaat dat als je op ff zoekt en je een color hebt met ff erin ($FFFF00) dat er een nieuwe span in die color komt te staan.
Nee, want het is een Elseif/else constructie. (Als je die eerste keer bedoelt tenminste) ;)
Je zal dus een manier moeten verzinnen om niet te zoeken in die spans of om op een andere manier te vervangen.
Daarom een str_replace ;)

Sundown Circus


  • OVERLORD_1982
  • Registratie: Juni 2001
  • Laatst online: 23-08 07:00
Was ff eten, str_replace is prima maar... het is case sensitive, en dat is nou juist net niet wat ik moet hebben.
Want Paymate heeft de ene keer wel een hoofdletter, en de andere keer niet :(

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

OVERLORD_1982 schreef op 06 september 2002 @ 13:28:
Was ff eten, str_replace is prima maar... het is case sensitive, en dat is nou juist net niet wat ik moet hebben.
Want Paymate heeft de ene keer wel een hoofdletter, en de andere keer niet :(
Ja.. en? je vervangt toch ook geheel $zoeksplits[$i] voor HTML+$zoeksplits[$i] + een daarbij behorende $kleur[$i] ... Dus dat maakt dan niet uit.

Of ik begrijp niet wat je wil. :)

Sundown Circus


  • OVERLORD_1982
  • Registratie: Juni 2001
  • Laatst online: 23-08 07:00
Ja dat maakt wel uit. Op jou manier neemt i alleen exact over wat jij typt, dus als je zoekt op paymate, dan wordt de helft maar gekleurd, omdat de andere helft Paymate heet.

Ik deed het met eregi_replace, deze is niet case sensitive.

Verwijderd

Dan gooi je er desnoods dit overheen (untested!):

PHP:
1
2
$letter = strtoupper(substr(0, $string));
#een tweede replace


Maar je kunt natuurlijk ook gewoon eregi_replace aanhouden.

Dom! http://www.php.net/ucfirst is makkelijker wellicht.

[ Voor 0% gewijzigd door Verwijderd op 06-09-2002 14:51 . Reden: domdomdomdomdomdomdomdomdomdomdomdomdomdomdom ]


  • OVERLORD_1982
  • Registratie: Juni 2001
  • Laatst online: 23-08 07:00
Die methode had ik al geprobeerd, het probleem is dat het er niet voor zorgt dat het geheel niet meer case sensitive is.
Als je het met hoofdletters zou schrijven zouden het kleine letters worden, en dus pakt i dan alsnog maar de helft ;(

en eregi replace werkt ook niet aangezien die dus in de source gaat lopen knutselen ;(

Het wordt tijd dat ze stri_replace gaan uitvinden :)

[ Voor 0% gewijzigd door OVERLORD_1982 op 06-09-2002 15:03 . Reden: Moet wel echt zielig zijn natuurlijk :) ]


  • Grum
  • Registratie: Juni 2001
  • Niet online
[rml]ACM in "[ PHP] Laat die source met rust!!!"[/rml]

Nooit berichten van Modjes overslaan ;)

Verwijderd

Ga je ervan uit dat mensen paYmaTE in gaan toetsen ofzo?

Ik heb ff geknutseld in dit in elkaar geflansd. Kan iemand dit even testen? Ben benieuwd maar zit op school... dus kan ff nie.
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
<?php
$string = "Ik ben een tekst met zowel Blaat als blaat erin: blaat, schaap Blaat, mekker blaat Blaat wol";


$start = microtime();
for ($i=0;$i<100000;$i++)
{

    $txt = eregi_replace("Blaat", "<b>$1</b>", $sting);
}

$end = microtime ();
echo "$end-$start=". $end - $start;
echo "<hr>";
flush();

for ($i=0;$i<100000;$i++)
{

    $txt = str_replace("blaat", "<b>$1</b>", $sting);
    $txt = str_replace(ucfirst("blaat"), "<b>$1</b>", $sting);
}
$end = microtime ();
echo "$end-$start=". $end - $start;
flush();
?>

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Verwijderd schreef op 06 september 2002 @ 15:07:
Ga je ervan uit dat mensen paYmaTE in gaan toetsen ofzo?

Ik heb ff geknutseld in dit in elkaar geflansd. Kan iemand dit even testen? Ben benieuwd maar zit op school... dus kan ff nie.
Ik weet niet wat je met deze code wil bereiken, maar mijn Dev-bak loopt erop vast iig ;).

Kijk, je kan het op ACM's manier doen, maar ik vraag me alleen af waarom je nadat je je zoekresultaten terug hebt gevonden een preg_replace() of een eregi_replace() wil doen. Het is immers output en geen input. :?

Volgens mij highlight hij gewoon met die str_replace(). Maar goed...

[ Voor 0% gewijzigd door RedRose op 06-09-2002 15:20 . Reden: en ik had error_reporting = E^ALL aanstaan daniel! ;) ]

Sundown Circus


  • OVERLORD_1982
  • Registratie: Juni 2001
  • Laatst online: 23-08 07:00
Je hebt helemaal gelijk RedRose, maar die output wordt in een andere pagina gestopt waarin results zijn.
wat dit doet is alleen het specifieke ingevoerde word kleuren, zo identiek dat i zelfs valt over hoofd of kleine letters.

Ik zal ff een pickie voor je maken om het te showen.

  • OVERLORD_1982
  • Registratie: Juni 2001
  • Laatst online: 23-08 07:00
Afbeeldingslocatie: http://www.xs4all.nl/~rladage/images/kleineinvoer.JPG

Afbeeldingslocatie: http://www.xs4all.nl/~rladage/images/kleine.JPG

  • OVERLORD_1982
  • Registratie: Juni 2001
  • Laatst online: 23-08 07:00
Ik heb het nu zo gedaan, dat de ingevoerde tekst, en de opgevraagde tekst allebei geheel in kleine letters wordt weergegeven.

Op deze manier, is de 'bug' er uit, maar ik zie het meer als een workaround dan als een opplossing, aangezien alle 'nodige' hoofdletters verdwijnen.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Dit naar aanleiding van die geile kleurtjes hier op GOT.
Mijn aangeduidde oplossing wordt voor de search-results-pages van GoT gebruikt, en dat werkt best aardig.

Ik raad je aan er es naar te kijken :)
RedRose schreef op 06 september 2002 @ 15:19:
Ik weet niet wat je met deze code wil bereiken, maar mijn Dev-bak loopt erop vast iig ;).

Kijk, je kan het op ACM's manier doen, maar ik vraag me alleen af waarom je nadat je je zoekresultaten terug hebt gevonden een preg_replace() of een eregi_replace() wil doen. Het is immers output en geen input. :?

Volgens mij highlight hij gewoon met die str_replace(). Maar goed...

Een str_replace of een preg_replace doen basicly hetzelfde... Alleen kijkt de door mij aangewezen regexp wel intelligent naar de output en blijft ie van html-codes af.
DAT leek me een van de problemen van de topicstarter.

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

is dit wat je zoekt?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
$zoeksplits[0] = "PaYMOOH"; 
$zoeksplits[1] = "paymooh";
$zoeksplits[2] = "payMooh"; 
$zoeksplits[3] = "PAYMOOH"; 

$kleur[0]="#FFFF00"; 
$kleur[1]="#00FF00"; 
$kleur[2]="#FF00FF"; 
$kleur[3]="#0000FF"; 

$i=0;

while ($i < 4) { 

   $tmpVar = preg_replace("/$zoeksplits[$i]/",
"<span style=\"background-color:$kleur[$i]\">\\0</span>",$zoeksplits);

   $docshow[$i] = $tmpVar[$i];
$i++;
} 
print_r($docshow);
?>

[ Voor 0% gewijzigd door RedRose op 06-09-2002 17:29 . Reden: layout verneukende zooi ]

Sundown Circus


  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

ACM schreef op 06 september 2002 @ 17:02:
[...]Een str_replace of een preg_replace doen basicly hetzelfde... Alleen kijkt de door mij aangewezen regexp wel intelligent naar de output en blijft ie van html-codes af.
DAT leek me een van de problemen van de topicstarter.
Daar heb je gelijk in. :>

/edit met een puntje ;) : de html wordt er pas met de regexp ingezet.

Sundown Circus

Pagina: 1