Mailinglisten-Archive |
Hi, On Saturday 22 May 2004 12:41, Norbert Pfeiffer wrote: > missbilligt - aber nie abgeschafft, auch nicht in PHP5, > wie der 'erweiterte' Versuch zeigt: Hatte ich auch schon erwähnt ;-) > Wieso ist eigentlich '' == "\0" ... <gruebel> Ist es nicht. $ php -r 'var_dump("" == "\0");' bool(false) $ php -r 'strlen("");'; 0 $ php -r 'strlen("\0");'; 1 Das Zeichen \0 entspricht dem Zeichen mit ASCII-Code 0 und dass ist NULL und Du siehst es nur nicht, wenn Du die Ausgabe jedoch mit einem HEX-Editor oder ählnichem betrachtest wirst Du es sehen. > Wenn man in C oder VB in einen String eine \0 einfuegt, > kann man sich wenigstens darauf verlassen, > dass er genau dort zu Ende ist. Mit VB kenne ich mich nicht aus, aber in C ist er dann nicht zu Ende bloß die meisten "einfachen" Stringfunktionen von C _interpretieren_ das \0 als Ende des Strings - wie schon mal in meiner letzten Mail erwähnt ist in C ein String ein Array von chars. Ein solches C Array "trägt" seine Länge aber nicht mit sich rum, so dass eine Funktion nicht "weiß" wie lange das Array ist und da ist es eine Regel, dass das \0 als Ende gewertet wird - das weiter auszufüren ist hier aber OT, daher Rückführung auf PHP: Ein String in PHP ist in der internen Darstellung[1] ein C-String zusammen MIT einer Längenangabe und ein Großteil der internen Funktionen nutzt jetzt eben diese Längenangabe und nicht \0 als Begrenzung wodurch PHP in weiten Teilen "binary safe" ist. (Es gibt ein paar Funktionen, die externe Bibliotheken nutzen, die nicht binary safe sind und somit ist den den Bereichen PHP auch nicht binary safe, daher die Einschränkung auf weite Teile) johannes [1] http://lxr.php.net/source/Zend/zend.h#249
php::bar PHP Wiki - Listenarchive