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