ďťż

[php] Wyszukiwarka z podświetleniem znalezionych

       

Podstrony


telcocafe

Na stronie mam przykładowy wynik wyszukiwania. Niestety nie są podświetlane wszystkie wyniki. Używam funkcji str_replace. Kod funkcji:
function highlightText($text, $word) { $textNew = str_replace($word, '<span class="highlight">'.$word.'</span>', $text); return($textNew); }
Gdzie $text to przeszukiwany tekst, a $word to szukana fraza.
Próbowałem na różne sposoby, ale szukam dobrego i szybkiego zamiennika, by po zadaniu pytania coś podświetliło mi zarówno coś jak i COŚ, Coś oraz CoŚ (jeżeli wystąpią :P ).



function highlightText($text, $word) { $textNew = str_ireplace($word, '<span class="highlight">'.$word.'</span>', $text); return($textNew); }

Nie wiem czemu, ale nie działa...

Fatal error: Call to undefined function: str_ireplace() in /var/www/sites/yoyo.pl/a/n/andrzej-aa/gallery/app/functions.inc.php on line 29
Szukałem również w PHP Manual. Znalazłem zastosowanie:
<?php $bodytag = str_ireplace("%body%", "black", "<body text=%BODY%>"); ?>
Ale nie rozumiem jego działania.

Hmmm... Może czas się przesiąść na nowszą wersję PHP?
PS. O ile dobrze pamiętam, na yoyo trzeba mieć skrypt o rozszerzeniu php5, jeśli chcesz mieć funkcje z nowszej wersji PHP.

$bodytag = str_ireplace("%body%", "black", "<body text=%BODY%>");
Czyli inaczej:
$tekst = str_ireplace('jakis tekst', 'zamiennik jakiegos tekstu', 'JAKIS tekst');
Teraz rozumiesz?



Nie zauważyłem PHP5 w PHP Manualu ;p
Raczej nie przesiądę cię na PHP5, ponieważ na razie trzymam się PHP4 i to mi wystarcza, a przesiadka na piątkę trochę może kosztować na mojej stronie... Chyba, że są strony z opisem różnic, albo Redakcja kiedyś umieści w Ekspercie takowy artykuł.
Użytkownik andrzej_aa edytował ten post 08 styczeń 2007, 08:04
Niektórzy pewnie uznają, że źle robię, ale to jest jedyny sposób bym dowiedział się co i jak... Temat nie został zamknięty, ponieważ nie uzyskałem wyczerpującej odpowiedzi.

Chodzi mi o to, że funkcja str_ireplace nie daje efektu, którego oczekiwałem... Przykład... Tekst jest podświetlany, ale zamiast np. Barwy jesieni jest BarWy jesieni. Czy da się coś z tym zrobić?

function highlightText($text, $words) { $words = preg_split('#[\+\-\s]+#is', $words); for ($i = 0; $i < count($words); $i++) { $text = str_replace($words[$i], '<span style="color:red">' . $words[$i] . '</span>', $text); } return $text; } echo highlightText('Ala ma kota.', 'ma+kota');
?

// edit: kurde, zapomniałem, że to nie rozróżnia wielkość liter...

PS. http://www.andrzej-a...22%3C/script%3E - załataj to :)
Użytkownik Coldpeer edytował ten post 24 styczeń 2007, 21:35
Dobre, ale postaram się w domu to poprawić i nie będzie tak ciekawo :P

//edit

no no... nie pomyślałem o tym ;) ale htmlspecialchars raczej Ci utrudni życie :P

P.S. wciąż nie wiem jak to zrobić... czy za pomocą funkcji regularnych Pascala nie da się?

//edit

Coldpeer... Trochę się napracowałeś ;) ale udałe Ci się... Teraz nikt nie znajdzie żadnego błędu na stronie... Poprawiłem na każdej, na której mógł się pojawić.
Użytkownik andrzej_aa edytował ten post 26 styczeń 2007, 11:44

Coldpeer... Trochę się napracowałeś ;) ale udałe Ci się... Teraz nikt nie znajdzie żadnego błędu na stronie... Poprawiłem na każdej, na której mógł się pojawić.
A tam, nie cała minuta. Popularny XSS wynikający z braku filtrowania znaczników HTML przesyłanych metodą GET. ;)

Ha, ha! Minuta? Miałem logi z wyszukiwania, ale skasowałem bo mi panel admina nie włączał się i PHPMyAdmin szwankował. To nie była minuta :)

andrzej_aa: minuta znalezienie (ee, mniej - pierw tylko sobie dałem alerta żeby sprawdzić, czy filtrujesz, czy nie :)), potem sobie tylko zmieniałem CSS oraz JS :P
http://www.andrzej-a...22%3C/script%3E
Użytkownik Coldpeer edytował ten post 26 styczeń 2007, 13:00
No nieźle ;) jak to zablokować?

//edit

ha ha ! bardzo śmieszne... jak przekonwertować string do systemu 16 bitowego? tak by w nazwie mogły się znaleźć tylko znaki 16-bitowe...
Użytkownik andrzej_aa edytował ten post 26 styczeń 2007, 13:16
Wartość "pic_file" jest pobierana z bazy danych - sprawdzaj, czy wartość, którą pobrałeś istnieje w tabeli w danym polu. Coś w stylu:

$wynik = $db->query('Select id from tabela where id = '.$_GET['pic_file']); if($db->num_rows($wynik) > 0) // istnieje

Oraz jako, że jest to id, więc zawiera tylko liczby całkowite, dopuszczaj tylko cyfry :)
Użytkownik Coldpeer edytował ten post 26 styczeń 2007, 13:17
Nie mogę tego załatać...
Coś mam w kodzie nie tak :/

Może to Cię naprowadzi. Pierw z $_GET['pic_file'] wyciągasz same cyfry takim regexpem:

$_GET['pic_file'] = preg_replace('@[^0-9]@', '', $_GET['pic_file']);

I sprawdzaj, czy istnieje takie id w bazie, jak napisałem wyżej.

// ah, sprawa wygląda o wiele prościej. pic_file przechowuje nie tylko cyfry - to hash, więc jest typu pewnie varchar. To tylko sprawdzaj, czy istnieje taki rekord w bazie.
Użytkownik Coldpeer edytował ten post 26 styczeń 2007, 13:38
Poradziłem sobie, ale na innych stronach można to samo zrobić... Nie wiem co się dzieje...

//edit

Poprawione ;) Wszystko działa sprawnie... Są małe problemy, ale może ich nie dostrzeżesz :ph34r:

//edit

Coś przedobrzyłem... teraz strona w ogóle się nie otwiera.

//edit

Już naprawiłem... Teraz spróbuj znaleźć błąd :D
Użytkownik andrzej_aa edytował ten post 26 styczeń 2007, 14:16
Nie mogę nic znaleźć :)
BTW: chyba przesadziłeś trochę z tym newsem na głównej ;] Włamanie umożliwiające podmianę treści? Ale tylko z odpowiednio spreparowanym linkiem i bez większych szkód dla strony ;)

PS. fajny pomysł z linkiem do panelu admina przez copyright'a
Użytkownik Coldpeer edytował ten post 26 styczeń 2007, 14:54
Wiem ,ale nie potrafiłem tego opisać... Będzie włamanie ;p chyba że masz lepszy pomysł :>
I nie znajdziesz :P Strona jest już poprawna ;)

//edit

Zamiast wpisywać url to mam skrót na fasta :P
Użytkownik andrzej_aa edytował ten post 26 styczeń 2007, 14:56

chyba że masz lepszy pomysł :>
"Luki XSS na stronie" chociażby


Zamiast wpisywać url to mam skrót na fasta :P
Dlatego mówię, że fajny pomysł.

// @down: zrobisz jak zechcesz. to tylko propozycja z mojej skromnej osoby :D
Użytkownik Coldpeer edytował ten post 26 styczeń 2007, 15:27

"Luki XSS na stronie" chociażby
No dobra. Chociaż nie każdy może wiedzieć co to <_< Jak wykazują wyniki mojej ankiety...

Dlatego mówię, że fajny pomysł.
A ja to potwierdzam :D

//edit

Wszystkie luki załatane ;)
Użytkownik andrzej_aa edytował ten post 29 styczeń 2007, 08:08
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.