• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Filtern der ersten 32 Zeichen

Yogilein

Member
Hallo,

ich verzwackel gerade, denn das geht bei mir nicht:

Code:
<?php
header("Content-Type:text/html;charset=utf-8");
$text="äöüÄÖÜß+Te st";
$text=preg_replace('/[\x00-\x1F]/u','',$text);
echo $text;
?>

Das Leerzeichen in dem Wort "Test" ist eine binäre Null, entspricht also x00, und sollte ausgefiltert werden, aber genau das passiert nicht. Das Ergbnis lautet: "äöüÄÖÜß+Te st". Was mache ich falsch?
 
wie kommst du zu dieser annahme?
OK, das ist vielleicht mein Denkfehler. Ich ging die ganze Zeit von einer binären Null aus, hatte aber im Text das Zeichen, das man über die Tatstaureingabe ALT+255 erhält.

Trotzdem bleibt meine Frage: Wie unterdrücke ich dieses Zeichen oder auch anderen Zeichen, die keine Leerzeichen sind, aber als Leerzeichen dargestellt werden.

Es geht darum: Jemand gibt bei seinem Namen solche Zeichen ein und PHP erkennt nun einen Namen, der aber am Bildschirm dargestellt, leer ist. Leerzeichen sind dagegen kein Problem, denn diese schneide ich am Anfang und am Ende ab. Ich möchte mich aber nicht auf Zahlen und Buchstaben beschränken, da durchaus jemand "♥chen" schreiben darf.
 
Hmm, so weit war ich auch schon, doch werden hier zu viele Zeichen abgeschnitten.

Folgendes habe ich gemacht:

Ich gebe das hier ein: äöüÄÖÜß ♥\*+4=?

und erhalte dies:

äöüÄÖÜß4

Da wird doch weit mehr entfernt, als die nicht druckbaren Zeichen, oder sehe ich das falsch? Zumindest ist es nicht das, was ich wollte. In diesem Beispiel sollte nur das ALT+255-Zeichen entfernt werden.

Mein Code:

Code:
<?php
header("Content-Type:text/html;charset=utf-8");
$text=$_POST["text"];
$text=preg_replace('/\W/u','',$text);
echo $text;
?>

und für die Eingabe:

Code:
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body>
<form name="Test" action="http://www.YogiSpiele.de/Seiten/test.php" method="post">
<p><input name="text"></p>
</form>
</body>
</html>
 
ich weiß von php nichts. fischt dieses preg_replace() ganz ohne schleife auch an mehreren positionen unerwünschte zeichen raus?
und was genau macht dein schalter /u?
 
Ja, bei preg_replace braucht man keine Schleife.

Der Schalter /u bewirkt, dass der String als Unicode angesehen wird. Ohne diesen Schalter werden einzelne Bits verglichen, was nur bei einem 8-Bit-Zeichensatz sinnvoll ist.
 
Zurück
Oben