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
