[PHP] Jak usunąć znaki końca linii, podwójne spacje, inne znaki?
Chcesz pozbyć się ze zdania lub wyrazu wszelkich zbędnych znaków, jak podwójne spacje, znaki końca linii, tabulacje, spacje na początku lub końcu. Często ludzie na forach dyskusyjnych lub podczas zapisywania się na prenumeratę dodają wiele niepotrzebnych znaków, które trzeba skasować. Problem pojawia się też po odczytaniu danych z pliku tekstowego lub formularza, który zawiera znaki końca linii.
Nie zawsze trzeba usuwać wszystkie wymienione znaki, ale jeżeli program ma być kompletny lepiej zabezpieczyć się przed wszystkimi możliwościami. Oto gotowy kod programu:
<?
$p = " zdanie z dużą ilością spacji
i znakiem końca linii ";
$p=ereg_replace("\t"," ",$p); //znaki tabulacji
$p=ereg_replace("\r"," ",$p); //znak końca linii
$p=ereg_replace("\n"," ",$p); //znak końca linii
$p=ereg_replace(" {2,}"," ",$p); //podwójne spacje
$p=trim($p); //początkowe i końcowe spacje
echo $p;
?>
W wyniku otrzymasz zdanie "wyczyszczone":
zdanie z dużą ilością spacji i znakiem końca linii
Program wykorzystuje funkcję ereg_replace(), która pozwala zamieniać łańcuchy znaków i przy okazji można w niej stosować wyrażenia regularne. Znak \t to tabulacja, \r - to porót karetki stosowany w systemach Windows i pod Dosem, a \n - to przejście do nowej linii stosowany w każdym z systemów. W Linuxie koniec linii to tylko znak \n, a w Windowsie koniec linii składa się z dwóch znaków \r\n.
Po zamianie końców linii i tabulatorów na spacje, eliminujemy wszystkie wielokrotne spacje dopasowane do wzorca " {2,}" (spacje występujące dwa i więcej razy). Jeżeli ich nie ma, kasujemy jeszcze spacje na początku i końcu zdania - ludzie często je tam dodają.
W wyniku otrzymamy czysty łańcuch znaków. W razie potrzeby można wyeliminować również inne znaki. Mogą to być też całe fragmenty tekstu, np. komentarze w HTMLu:
$p = ereg_replace("<!--(.|\n)*-->","",$p);