Jak w php usunąć znaki, które są spoza ASCII


Pracując z różnego rodzaju skryptami i stronami w PHP stykamy się z obróbką tekstu. Do tego dochodzi znajomość zagadnień związanych ze znakami, które stanowią część alfabetu dla danego języka, a które nie są dostępne w innymi Państwie. Znaczący problem bywał do tej pory z polskimi znakami, gdyż jak wiemy polskim standardem jest ISO-8859-2 natomiast M$ narzucił nam własny standard windows-1250, który jest z krajowym standardem nie kompatybilny.
Ciekawiej sytuacj wygląda gdy mamy do czynienia ze znaczkami, których ni jak nie da się podejść w naszym języku, mam tu na myśli znaki typu äó. Znaki te mogły się tu znaleźć np. po przekodowaniu znaków krajowych danego języka na utf-8.
W tej sytuacji możemy użyć w języku PHP tzw. podstawiania przy użyciu dopasowania z wyrażeniami regularnymi. Przy ich pomocy można z łatwością za pomocą prostych składni pozbyć się sporej grupy niepotrzebnych znaczków.

Przykład jak usunąć znaki tzw. nie ASCII:

$string = "Remove these characters: äó";
$string = preg_replace('/[^(\x20-\x7F)]*/','', $string);

W pierwszej linii mamy przykład tekstu gdzie na końcu są znaki nie do rozczytania.
Druga linia zawiera funkcję, która za pomocą wyrażeń regularnych zrobi podmianę:
- pierwszy argument to wyrażenie definiujące, że wszystkie znaki spoza ASCII 20-7F powinny być zmienione
- drugi argument mówi, że zmieniamy na puste
- trzeci argument to nasz tekst

 

Na wesoło ;)

Kolejka w aptece.
Pierwszy klient podchodzi do okienka, daje receptę, aptekarz mówi mu:
- 320 złotych proszę.
Drugi podchodzi, daje receptę, aptekarz mówi mu:
- 340 złotych.
Trzeci podchodzi, aptekarz mówi mu:
- 390 złotych.
Czwarty facet w kolejce się lekko poddenerwował i mówi:
- Panie mgr, wszyscy idziemy od tego samego lekarza, wszyscy mamy taki sam lek na recepcie, dlaczego jedni płacą mniej, a inni więcej? Mgr odpowiada:
- No wie pan, mamy taki kod z lekarzem, taką umowę....
Facet się zdenerwował i mówi:
- Panie, niech pan nam powie co to za lek, dlaczego ma inną cenę? Na recepcie było napisane : CC NWCMJDMCC CC. Klienci zaczęli nerwowo naciskać na aptekarza, bardzo chcieli żeby im przeczytał co to oznacza, co to za lekarstwo... W końcu aptekarz pod wpływem nacisku zaczął czytać z rumieńcami na twarzy:
- Cześć Czesiek, Nie Wiem Co Mu Jest, Daj Mu Co Chcesz, Cześć Czesiek.