RegExp -> Alles außer <space>
Anna
- php
hallo,
ich möchte in einem string alle @username durch
<a href="http://domain.de/username">@username</a> ersetzten.
Momentan löse ich dies so:
preg_replace('/@([0-9a-z]*)/i', '<a href="http://domain.de/$1">@$1</a>', $text);
Und das funktioniert auch, das problem ist nur
das der benutzername aus eigentlich jedem buchstaben bestehen kann außer aus einem leer zeichen.
Wie müsste mein erste regexp lauten, wenn alle ziffern/zahlen enhalten sein können aber _kein_ space?
Liebe Grüße Anna
Hi,
Und das funktioniert auch, das problem ist nur
das der benutzername aus eigentlich jedem buchstaben bestehen kann außer aus einem leer zeichen.
ein Leerzeichen ist kein Buchstabe. Durch "[0-9a-z]*" hast Du damit Dein Problem gelöst. Falls ein Benutzername ohne ein einziges Zeichen verboten sein sollte, empfehle ich, statt des "*" ein "+" zu verwenden.
Cheatah
ein Leerzeichen ist kein Buchstabe. Durch "[0-9a-z]*" hast Du damit Dein Problem gelöst. Falls ein Benutzername ohne ein einziges Zeichen verboten sein sollte, empfehle ich, statt des "*" ein "+" zu verwenden.
Okay ich werde das * ersetzten, danke.
Das Problem ist nur das der Benutzer name auch $ % ^ ° ß ? =)( und alles anderen Zeichen beinhalten kann.
Ich kann dies leider nicht einschränken.
Grüße, Anna
Hallo Anna!
Das Problem ist nur das der Benutzer name auch $ % ^ ° ß ? =)( und alles anderen Zeichen beinhalten kann.
Dann definiere Deine Zeichenklasse anders:
http://de.selfhtml.org/perl/sprache/regexpr.htm#zeichen, schau mal unter \S in der Tabelle!
/@([\S]*)/
Allerdings wird aus @user name$%42: <a href="http://example.org/user">@user</a> name$%42
Falls Dir der Username als Variable vorliegt, solltest Du erstmal abfragen, ob da ein Leerzeichen enthalten ist.
Viele Grüße aus Frankfurt/Main,
Patrick
Hi,
Das Problem ist nur das der Benutzer name auch $ % ^ ° ß ? =)( und alles anderen Zeichen beinhalten kann.
auch "<", "/", "a" und ">"? Dann hast Du noch ganz andere Probleme.
preg_replace('/@([0-9a-z]*)/i', '<a href="http://domain.de/$1">@$1</a>', $text);
Grundregel der Software-Entwicklung: Wenn Du einen Wert in einen Kontext bringst, musst Du diesen Wert kontextspezifisch kodieren. Das gilt *immer* und *überall*. Bringst Du also einen Wert in einen URL-Kontext, musst Du ihn URL-kodieren. Bringst Du einen Wert - inklusive der kodierten URL - in einen HTML-Kontext, musst Du ihn HTML-kodieren. Derzeit ist Deine Ersetzung defekt, sobald Du mehr Zeichen als nur Ziffern und (ASCII-)Buchstaben zulässt[1].
Cheatah
[1] Eigentlich ist sie bereits jetzt defekt, nur entsprechen die Kodierungen von Ziffern und (ASCII-)Buchstaben sowohl in der URL als auch in HTML dem ursprünglichen Zeichen.