Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][wyrażenie regularne] usuwanie krzaków
JoShiMa
post
Post #1





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Mam wyrażenie regularne, które, przynajmniej teoretycznie powinno usuwać wszystko co nie jest literą cyfra i minusem. Niestety przepuszcza równieć inne krzaki.

Na przykład w tekście: the way » :photoschau on we heart it / visual bookmark #8765543

nie powinno być tych strzałek za słowem 'way'

Próbowałam tak:
  1. preg_replace('/([^a-żA-Ż0-9-])+/',' ',$string)

i tak:
  1. preg_replace('/([^\w-ęĘóÓąĄśŚłŁżŻźŹćĆńŃ])+/',' ',$string)



Jak się takich znaków pozbyć zostawiając jednocześnie polskie?

Oczywiście jak zrezygnuję z przepuszczania polskich znaków (w szczególności 'ż') to inne 'krzaki tez znikają, ale nie o to chodzi.
Go to the top of the page
+Quote Post
pyro
post
Post #2





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


  1. $string = preg_replace('|[^a-z0-9\-ążćńłóę]|i', '', $string):


// ADD

i pewnie będziesz musiała też wstawić duże polskie litery

// ADD

Nie chciało mi się szukać błędu w Twoim wyrażeniu więc napisałem nowe, ale jak teraz zerknąłem, to po prostu zabrakło escapeowania do znaku `-`, bo w nawiasie kwadratowym określa przedział, więc należało go wyescapować (IMG:style_emoticons/default/smile.gif)

// ADD

A i te nawiasy razem z tymi plusami są nieoptrzebne bo i tak wyrażenie wyłapie każdy pojedyńczy znak (tak informacyjnie)
Go to the top of the page
+Quote Post
potreb
post
Post #3





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


Wywala wszystko co nie jest literą, cyfrą i dodaje myślnik, tylko dodaj jeszcze polskie znaki, ale nie wiem jak z kodowaniem:
  1. $str = preg_replace( "/[^a-z0-1-_]{1}/i", '-', $str );


Ten post edytował potreb 13.04.2011, 20:56:53
Go to the top of the page
+Quote Post
JoShiMa
post
Post #4





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Wszystko ładnie, tylko rezultat się nie zmienia Twoje wyrażenie działa pod warunkiem, ze nie wstawi się Ż. Nie wiem czy to jest istotne, ale to wszystko jest w kodowaniu utf8.

Cytat(potreb @ 13.04.2011, 20:54:44 ) *
Wywala wszystko co nie jest literą, cyfrą i dodaje myślnik, tylko dodaj jeszcze polskie znaki, ale nie wiem jak z kodowaniem:
  1. $str = preg_replace( "/[^a-z0-1-_]{1}/i", '-', $str );


Tak też już robiłam \w to to samo co a-zA-Z. Efekt est jeszcze gorszy, bo niechciany znaczek jest zwyczajnie zamieniany na �
Go to the top of the page
+Quote Post
potreb
post
Post #5





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


  1. $str = "dssdsd8ŻżÓóŁł_972839809**&^%^3223;';/.[;[";
  2. $str = preg_replace( "/[^a-z0-1-ŻżÓóŁł_]{1}/iu", '-', $str );
  3. echo $str


Powinno być, ogólnie chyba lepiej czyścić z polskich znaków.

Ten post edytował potreb 13.04.2011, 21:05:38
Go to the top of the page
+Quote Post
JoShiMa
post
Post #6





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Cytat(potreb @ 13.04.2011, 21:04:54 ) *
  1. $str = "dssdsd8ŻżÓóŁł_972839809**&^%^3223;';/.[;[";
  2. $str = preg_replace( "/[^a-z0-1-ŻżÓóŁł_]{1}/iu", '-', $str );
  3. echo $str

Super. Wreszcie działa.

Cytat(potreb @ 13.04.2011, 21:04:54 ) *
Powinno być, ogólnie chyba lepiej czyścić z polskich znaków.

Ba... Gdyby to tylko ode mnie zależało...
Go to the top of the page
+Quote Post
pyro
post
Post #7





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Nie wiem może jestem niemiły (niech ktoś mnie uświadomi?) albo jestem ninja, ale ludzie mają dziwną tendencję do ignorowania mnie.

W pierwszej odpowiedzi podałem Ci działające rozwiązanie, które jest lepsze niż to, które wykorzystałaś potem z co najmniej dwóch przyczyn.

No to teraz życzę powodzenia w szukaniu bugów jak klient będzie na Ciebie krzyczał, że coś nie działa, tak jak powinno.

Pozdrawiam.
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #8





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


A kodowanie?
Co jeśli np. plik skryptu php z wyrażeniem regularnym zakoduejsz w utf-8,
a walidowany tekst będzie zakodowany przykładowo w iso-8852 ?
Go to the top of the page
+Quote Post
JoShiMa
post
Post #9





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Cytat(pyro @ 13.04.2011, 23:04:35 ) *
Nie wiem może jestem niemiły (niech ktoś mnie uświadomi?) albo jestem ninja, ale ludzie mają dziwną tendencję do ignorowania mnie.

Nie. Po prostu Twoje rozwiązanie, wbrew temu co Ci się wydaje, nie działa i już. Co z resztą napisałam.

Cytat(wNogachSpisz @ 13.04.2011, 23:08:15 ) *
A kodowanie?
Co jeśli np. plik skryptu php z wyrażeniem regularnym zakoduejsz w utf-8,
a walidowany tekst będzie zakodowany przykładowo w iso-8852 ?

Bez obaw.
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #10





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Cytat(JoShiMa @ 14.04.2011, 01:50:57 ) *
Bez obaw.

A to ciekawe, bo właśnie to testuję i:

źródło: utf-8
skrypt: utf-8
rezultat: żaden polski znak nie został wycięty, skrypt działa OK

źródło: utf-8
skrypt: iso-8859-2
rezultat: wcina wszystkie polskie znaki za wyjątkiem ź oraz ł

źródło: iso-8859-2
skrypt: iso-8859-2
rezultat: żaden polski znak nie został wycięty, skrypt działa OK

źródło: iso-8859-2
skrypt: utf-8
rezultat: wcina wszystkie polskie znaki za wyjątkiem ź oraz ł

Podsumowując:
Totalna kaszana, brud, smród, nędza, ubóstwo, płacz i zgrzytanie zębów :-]

Ten post edytował wNogachSpisz 14.04.2011, 01:14:24
Go to the top of the page
+Quote Post
JoShiMa
post
Post #11





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Czy ty umiesz czytać? Bez obaw znaczy, taka ewentualność nie ma prawa nastąpić.

Ten post edytował JoShiMa 14.04.2011, 01:07:49
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #12





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Cytat(JoShiMa @ 14.04.2011, 02:06:47 ) *
Czy ty umiesz czytać? Wstaw sobie w kodowaniu utf-8 dokładnie ten tekst:

the way » :photoschau on we heart it / visual bookmark #8765543

i przetestuj.

Czy ty umiesz myśleć?

Ten tekst to tylko PRZYKŁAD

Zakładam, że dla autora tematu (jak i przypadkowych czytelników) cenne jest, by skrypt radził sobie z każdymi innymi danymi wejściowymi.
Chyba że jestem w błędzie, to przepraszam.

Ten post edytował wNogachSpisz 14.04.2011, 01:33:20
Go to the top of the page
+Quote Post
pyro
post
Post #13





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Cytat(JoShiMa @ 14.04.2011, 01:50:57 ) *
Nie. Po prostu Twoje rozwiązanie, wbrew temu co Ci się wydaje, nie działa i już. Co z resztą napisałam.


To ja mam jakiś inny interpreter niż Twój? Bo u mnie ten sam kod dokładnie skopiowany z mojego postu działa wyśmienicie.
Go to the top of the page
+Quote Post
JoShiMa
post
Post #14





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Cytat(wNogachSpisz @ 14.04.2011, 01:16:50 ) *
Zakładam, że dla autora tematu (jak i przypadkowych czytelników) cenne jest, by skrypt radził sobie z każdymi innymi danymi wejściowymi.

Ja jestem autorem wątku. Zapędziłeś się.
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #15





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Cytat(JoShiMa @ 14.04.2011, 10:18:43 ) *
Ja jestem autorem wątku. Zapędziłeś się.

Poniekąd.
Problem w tym, że jest to forum publiczne, istnieje duża szansa, że ktoś kiedyś będzie miał podobny problem i uzyje powyższego rozwiązania, które to rozwiązanie mu nie zadziała właśnie ze względu na kodowanie..
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 18.09.2025 - 16:00