php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #12274 parser/string access problems
Submitted: 2001-07-20 05:55 UTC Modified: 2001-07-21 04:29 UTC
From: tegel at dubaron dot com Assigned:
Status: Not a bug Package: Strings related
PHP Version: 4.0.4pl1 OS: NT4
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: tegel at dubaron dot com
New email:
PHP Version: OS:

 

 [2001-07-20 05:55 UTC] tegel at dubaron dot com
Suppose a string $t:
one can access(read) all single characters of $t by reading elements $t[0] .. $t[n]
Setting $t[0] however fails, setting $t[1] .. $t[n] succeeds.
Looks like when setting element [0] that $t gets converted to array type, and after setting $t[0] the values $t[1]..$t[n] are simply lost.

why not this behaviour with other indexes as well, only with item[0] ? - that's not consistent.

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2001-07-20 14:20 UTC] zak@php.net
The use of brackets as to access a single character from a string is deprecated.

Use curly braces instead and you will experience the expected behavior.

i.e.
<?php
$foo    = 'bar';
$foo{2} = 't';
echo $foo;
?>

There is additional information at http://www.php.net/manual/en/language.types.string.php
 [2001-07-20 14:22 UTC] zak@php.net
Oops - that should be bogus, not closed. :)
 [2001-07-20 22:52 UTC] cynic@php.net
BTW, I can't reproduce it with a recent CVS checkout:

[cynic@linux cynic]$ cat test.php 
<?
$s = "hello" ;
$s[0] = "H" ;
var_dump($s) ;
?>
[cynic@linux cynic]$ php -q test.php 
string(5) "Hello"
[cynic@linux cynic]$ php -v
4.0.7-dev
 [2001-07-21 04:15 UTC] tegel at dubaron dot com
This piece of code works correct with our system as well:
<?
$s = "hello" ;
$s[0] = "H" ;
var_dump($s) ;
?>


Original sourcecode generating this problem is as follows (although i can not see a particular difference):

 function ansi2htmlsingle($t) {
 //convert special characters from one 8-byte 
 //charset another
  for ($i=0; $i<strlen($t); $i++ ) {
   $c=ord($t[$i]);
   $d=$c;
   switch ($c) {
    case 138: $d=169; break; 
    case 142: $d=174; break; 
    case 154: $d=185; break; 
    case 158: $d=190; break; 
   };
   $t[$i]=chr($d); 
  };
  return $t;  
 };

The above function is working only not for character $t[0].

This one is:

 function ansi2htmlsingle($t) {
  $r='';
  for ($i=0; $i<strlen($t); $i++ ) {
   $c=ord($t[$i]);
   $d=$c;
   switch ($c) {
    case 138: $d=169; break; 
    case 142: $d=174; break; 
    case 154: $d=185; break; 
    case 158: $d=190; break; 
   };
  $r=$r.chr($d);
  };
  return $r;  
 };


 [2001-07-21 04:29 UTC] tegel at dubaron dot com
Output with second version of function:
?ITO d.o.o. Osijek

Output with first version of function:
Warning: Undefined offset: 1 in c:\inetpub\wwwroot\info.php on line 20
Warning: Undefined offset: 2 in c:\inetpub\wwwroot\info.php on line 20
etc. etc. Elements $t[1]..$t[n] are _lost_ !

changing function to start from element $t[1] (skip first character) like "for ($i=1; $i<n; $i++)" and all suddenly works fine... (except for first char not get translated)...



 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 17:01:58 2024 UTC