unbekannte Zeichen ersetzten

dwex

Erfahrenes Mitglied
Hallo Leute,

schon wieder ein Problem bei dem ich nicht weiterkomme und um eure Hilfe bitte.

Ich bekomme einen mir immer unbekannten Text übergeben.
Aus diesem Text möchte ich nun alle "schädlichen" Zeichen in andere umwandeln.

z.B. soll "ä ü ö ß Ä Ü Ö Leerzeichen" jeweils in "ae ue oe ss Ae Ue Oe -" ersetzt werden.
Das bekomme ich ja mit str_replace hin - kein Problem.

Jetzt können dort aber auch beliebige weitere Zeichen (auch mir völlig unbekannte) vorkommen. Die Einfachsten wären dann wohl € und @ - schwieriger aber z.B. Æ Å oder so.

Ich bräuchte also eine Funktion welche erst die ä ü ö ß Ä Ü Ö in die jeweiligen pondons umwandelt (kein Problem) und anschliessend alle "unbekannten" ausser a-z, 0-9, A-Z in etwas anderes z.B. - verwandelt.

Hat jemand eine Idee?
Der liebe Herr Google hat mir nur das Suchen&Ersetzen-Prinzip "ausgeworfen".

Vielen Dank für euer Mithilfe im voraus!
 
Zuletzt bearbeitet:
Du könntest das auch mit einem Regulären Ausdruck bewerkstelligen. Ersetze alles was nicht ASCII-Konform ist, durch ein beliebiges Zeichen:

PHP:
// $text sei jetzt mal die Variable mit dem Text:
$text = preg_replace( '/[^(\x20-\x7F)]*/', '-' /* <== Hier das gewünschte Zeichen eintragen */, $text );

echo $text;
 
Du könntest das auch mit einem Regulären Ausdruck bewerkstelligen. Ersetze alles was nicht ASCII-Konform ist, durch ein beliebiges Zeichen:

! " § $ % & / ( ) = ? wären aber ASCII-Konform - oder sehe ich das falsch?
Auch diese Zeichen sollten natürlich automatisiert entfernt/ersetzt werden.

Gibt es eine Liste der ASCII-Konformen-Zeichen - dann könnte ich zumindst diese mit str_replace vorher noch ersetzen?
 
@saftmeister:
vielen dank - das werde ich gleich mal probieren.

@threadi:
die in deinem link beschriebene funktion prüft ja nur ob "unerwünschte" Zeichen enthalten sind - ersetzt diese aber nicht.

@saftmeister:

dein beispielcode gibt jetzt meinen String mit jeweils einem - nach jedem Zeichen zurück :eek:

Beispiel:
PHP:
$text = "Das ist der Text";

// $text sei jetzt mal die Variable mit dem Text:
$text = preg_replace( '/[^(\x20-\x7F)]*/', '-' , $text );
 
echo $text;
liefert zurück:
Code:
-D-a-s- -i-s-t- -d-e-r- -T-e-x-t-
 
Zuletzt bearbeitet von einem Moderator:
Ja schon klar - aber der RegEx funktioniert dort nicht und ich bin mit RegEx nicht so fit das ich das selbst herausbekommen - bitte Hilfe******

Ich hab´s jetzt "Quick & Dirty" gelöst:
PHP:
$text = "Das ist der Text auch ein ü und darf nicht fehlen!";

$erlaubt = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789üöäÜÖÄß";
//$text = preg_replace( '/[^(\x20-\x7F)]*/', '-' , $text );
//echo $text;


$laenge = strlen($text);


for($i=0; $i<$laenge; $i++) {
		
	if(preg_match("/".substr($text, $i, 1)."/", $erlaubt)) {
		$neuer_string .= substr($text, $i, 1);
		
	} else {		
		$neuer_string .= "-";
	}
	
}

$ersetzen = array( 'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', 'ß' => 'ss',  'A' => 'Ae', 'Ö' => 'Oe', 'Ü' => 'Ue' );
$neuer_string = strtr( $neuer_string, $ersetzen );



echo $neuer_string;
 
Zuletzt bearbeitet von einem Moderator:
PHP:
$text = preg_replace('![^a-z0-9]!i', '-', $text);

Wenn du aufeinanderfolgende Sonderzeichen nicht als eine Menge einzelner - anzeigen möchtest:

PHP:
$text = preg_replace('![^a-z0-9]+!i', '', $text);
 
Zurück