Hallo Olaf,
OK, das war ein bisschen auf die Schnelle formuliert. Aber abgesehen davon kenne ich eh keinen Grund, die ereg-Funktionen zu benutzen. Wer unbedingt will, kann sie als Extension laden, die meisten werden sie IMHO nicht benutzen.
Die mangelnde Binärsicherheit kann sogar zu Sicherheitslücken führen. Stell Dir vor, Du wendest per ereg() (oder eregi()) einen regulären Ausdruck auf eine Benutzereingabe an. Die ereg-Bibliothek denkt, der String wäre zu Ende, sobald ein 0-Byte auftaucht. Wenn der übergebene String also ein 0-Byte enthält, davor jedoch komplett harmlos ist, danach jedoch irgendwelche Böse sachen enthält, dann gibt ereg() true zurück (String matcht), obwohl der String eigentlich böse ist, und das Script könnte unter Umständen (je nachdem, wie dann mit der Eingabevariable weiter verfahren wird) Dinge tun, die es nicht tun sollte. preg_match() dagegen lässt sich von einem 0-Byte nicht täuschen (da die pcre-Bibliothek nicht nur den String selbst, sondern auch dessen Länge übergeben bekommt) und würde bei einer Eingabe mit 0-Byte sofort sagen, dass die Eingabe ungültig ist (außer der reguläre Ausdruck erlaubt das 0-Byte an der Stelle selbstverständlich).
Zugegebenermaßen, der Angriff mag jetzt etwas konstruiert klingen, aber ich kann mir durchaus vorstellen, dass sowas in ungünstigen Situationen durchaus auftreten kann. Deswegen ist von den ereg*-Funktionen eigentlich nur abzuraten. Zudem sind preg* sowieso schneller und können mehr.
Viele Grüße,
Christian
"I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup