Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Podmiana wyrazów w danym ciągu tekstowym, Problem, z funkcją str_replace
L_Devil
post 27.04.2005, 10:35:51
Post #1





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


Mamy ciąg tekstowy, np:
Kod
Kupując wspierasz budowę itc. Więc kupuj więcej!
I teraz chciałbym pewne konkretne słowa podmienić na inne (powiedzmy. 'budowę' i 'kupuj'). Przygotowywuję sobie dwie tablice. Jedna:
$change = array ('budowę', 'kupuj');
$change_to = array ('produkcję', 'płać');
etc.
Teraz używam funkcji:
  1. <?php
  2. $string = &#092;"Kupując wspierasz budowę itc. Więc kupuj więcej!\";
  3. $string = str_replace($change, $change_to, $string);
  4. echo $string;
  5. ?>

Efekt:
Cytat
płaćąc wspierasz produkcję itc. Więc płać więcej!
Czyli w stringu "Kupując" został podmieniony fragment "Kupuj(...)".

Aby uniknąć tego efektu wymyśliłem że przed i po każdym stringu będzie dorzucona spacja. Czyli dorzucamy:
  1. <?php
  2. $string = &#092;"Kupując wspierasz budowę itc. Więc kupuj więcej!\";
  3. for($i=0; $i < count($change); $i++){
  4. $change[$i] = &#092;" \".$change[$i].\" \";
  5. $change_to[$i] = &#092;" \".$change[$i].\" \";
  6.  
  7. }
  8. $string = str_replace($change, $change_to, $string);
  9. echo $string;
  10. ?>
I teraz uzyskujemy efekt:
Cytat
Kupując wspierasz produkcję itc. Więc płać więcej!
Czyli to, o co nam chodziło. Teraz niestety kolejny problem. Jeżeli string wejściowy będzie taki:
Kod
Kupując wspierasz budowę itc. Więc kupuj!
(tzn. bo 'kupuj' nie ma spacji). To oczywiście wyraz nie zostanie podmieniony.
No i jestem w kropce. Jak podmieniać stringi, które są samodzielnymi wyrazami, ale nie koniecznie po obu ich stronach znajdują się spacje?


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
Go to the top of the page
+Quote Post
j00seph
post 27.04.2005, 10:59:29
Post #2





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 3.10.2004
Skąd: Taka wiocha koło Cieszyna :P

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


Hmm...
Na pewno trzeba by to robic poprzez wyrazenia regularne - > eregi_replace();


--------------------
"Nemo Sine Vitiis Est" - Ktoś tak kiedyś powiedział... i miał rację.
Go to the top of the page
+Quote Post
Wave
post 27.04.2005, 17:50:11
Post #3





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

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


Po pierwszę co chcesz uzyskać??

Płacąc wspierasz produkcję itc. Więc płać więcej! questionmark.gif
  1. <?php
  2. $change = array ('budowę', 'Kupuj', 'kupuj');
  3. $change_to = array ('produkcję', 'Płac', 'płać');
  4. $string = &#092;"Kupując wspierasz budowę itc. Więc kupuj więcej!\";
  5. $string = str_replace($change, $change_to, $string);
  6. echo $string;
  7. ?>
Go to the top of the page
+Quote Post
L_Devil
post 27.04.2005, 19:52:49
Post #4





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


Nie, to jest właśnie niepożądany efekt. Ma podmieniać konkretne wyrazy, nawet jeżeli przed i po nich NIE znajduje się spacja (np. kropka). Natomiast jeżeli pominiemy spację w matrycy znajduje się np. 'bug' to wyraz 'bugtraq' automatycznie zostanie zmieniony na 'xxxtraq'. Tego nie chcę.


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
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: 15.06.2025 - 15:59