Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> str_replace, a sposób na ignorowanie wielkości liter
sonicius
post 14.10.2009, 20:39:25
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 2.02.2006

Ostrzeżenie: (0%)
-----


Krótko o co mi chodzi:

mam zapytanie z bazy mySql, które wybiera mi rekordy, gdzie w kolumnie opis znajdzie ciąg zadany z formularza np %Szkoła wyższa%

CODE
SELECT opis from jakas_tabela WHERE opis like %string z formularza%


Mysql domyślnie ignoruje wielkości liter (i bardzo dobrze)

Meritum:

Chcę znalezione słowo opisu zaznaczać dodatkowym stylem CSS

Wpadłem na proste rozwiązanie:

CODE
str_replace($string_z_formularza, '<span style="color: red;">'.$string_z_formularza.'</span>', $calosc_opisu_z_bazy)


Jednak ma to jedną wadę szukane wyrażenie musi "trafić" w wielkość liter jakie są w bazie danych:

Czyli - w bazie opis jest np. "test test test test Szkoła Wyższa test test test"

Str_replace oczywiście przyniesie skutek (i doda klase CSS) tylko jeżeli będziemy wyszukiwać ze zgodnością wielkości liter: "Szkoła Wyższa"

Jeżeli wpiszemy "szkoła wyższa" - niestety sad.gif Mysql zwróci wynik, ale str_replace nie wykona swojego zadania.

Prosiłbym o jakiś pomysł jak to najlepiej rozwiązać:

W ostateczności możnaby "podnosić" wielkość znaków całego opisu z bazy jak i wyrażenia z formularza, ale to skutkowałoby "podniesieniem" i wyświetleniem całego opisu w wielkich znakach, a tego chciałbym uniknąć.
Go to the top of the page
+Quote Post
krowal
post 14.10.2009, 20:47:01
Post #2





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

Ostrzeżenie: (0%)
-----


http://snippets.bigtoach.com/snippet/stri_replace/ albo preg_replace()


--------------------
Nawet świnka może wejść na drzewo kiedy jest chwalona :)
Go to the top of the page
+Quote Post
sonicius
post 14.10.2009, 20:58:26
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 2.02.2006

Ostrzeżenie: (0%)
-----


Sprytne rozwiązanie, ale ma jeszcze malutką wade

Co prawda wyszuka dowolnie pasujący wyraz (jeżeli chodzi o wielkość liter), ale jak by jeszcze wykombinować aby nie podmieniało (tych wielkości liter) z zadanych w formularzu.

Bo w formularzu wpiszemy np szKołA WyżSzA i zostanie wyświetlone to jako wynik hmm...
Go to the top of the page
+Quote Post
tiraeth
post 14.10.2009, 21:01:24
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


http://us3.php.net/manual/en/function.str-ireplace.php#91672
Go to the top of the page
+Quote Post
sonicius
post 14.10.2009, 21:30:04
Post #5





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 2.02.2006

Ostrzeżenie: (0%)
-----


Jednak nie działa mi coś to jak należy:

Napisze moje zastosowanie:

CODE
$zm = 'sdsd Test slsldjk';
$szukana = 'test';
$zm2 = $this->ext_str_ireplace($szukana,'<span style="background-color: yellow;">'.$szukana.'</span>',$zm);
echo $zm2;


Wynik to:

sdsd test slsldjk

Zamiast:

sdsd Test slsldjk



Dla uzupełnienia dodam, że wcześniejsza funkcja z przykładu manuala działa poprawnie:

function highlightStr($haystack, $needle, $highlightColorValue)

Ten post edytował sonicius 14.10.2009, 21:49:32
Go to the top of the page
+Quote Post
jmail
post 14.10.2009, 21:49:03
Post #6





Grupa: Zarejestrowani
Postów: 352
Pomógł: 53
Dołączył: 10.08.2009

Ostrzeżenie: (0%)
-----


no przecież podstawiasz $szukana która jest pisana z małej litery oO

musiałbyś zrobić tak

wyszukać czy taki ciąg istnieje a nastąpnie pobrać go ze stringa i wstawić to co pobrałeś w to miejsce a nie to co wyszukujesz
Go to the top of the page
+Quote Post
tiraeth
post 14.10.2009, 22:04:43
Post #7





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


  1. <?php
  2. function ext_str_ireplace($findme, $replacewith, $subject)
  3. {
  4. // Replaces $findme in $subject with $replacewith
  5. // Ignores the case and do keep the original capitalization by using $1 in $replacewith
  6. // Required: PHP 5
  7.  
  8. $rest = $subject;
  9. $result = '';
  10.  
  11. while (stripos($rest, $findme) !== false) {
  12. $pos = stripos($rest, $findme);
  13.  
  14. // Remove the wanted string from $rest and append it to $result
  15. $result .= substr($rest, 0, $pos);
  16. $rest = substr($rest, $pos, strlen($rest)-$pos);
  17.  
  18. // Remove the wanted string from $rest and place it correctly into $result
  19. $result .= str_replace('$1', substr($rest, 0, strlen($findme)), $replacewith);
  20. $rest = substr($rest, strlen($findme), strlen($rest)-strlen($findme));
  21. }
  22.  
  23. // After the last match, append the rest
  24. $result .= $rest;
  25.  
  26. return $result;
  27. }
  28.  
  29. $tekst = 'Lorem IpSuM dolor ipsum';
  30. echo ext_str_ireplace('ipsum', '<b>$1</b>', $tekst);
  31. ?>


Jak nie działa, jak działa.
Go to the top of the page
+Quote Post
kleer94
post 21.04.2010, 13:43:37
Post #8





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 21.04.2010

Ostrzeżenie: (0%)
-----


Rejestrowałem się przedewszystkim, aby odpowiedzieć na to pytanie smile.gif.
Mam nadzieję, że w przyszłoći ktoś na tym skorzysta, bo jest już troche późno na odpowiedź.
Funkcja "str_ireplace" jest analogiczna do funkcji "str_replace", tylko, że ta pierwsza ignoruje wielkość liter.
Pozdrowionka
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 8.08.2025 - 13:20