2011.06.20 21:38 Robert Eisele rašė:
> I really like the ideas shared here. It's a thing of consideration that
> array-functions should also work with strings. Maybe this would be the way
> to go, but I'm more excited about the OOP implementation of TextIterator
> and
> ByteIterator, which solves the whole problem at once (and is easier to
> implement, as mentioned by Stas). As Jonathan  said, Database results with
> a
> certain encoding could get iterated, too. The only way to workaround the
> Text/Byte problem would be, offsetting >EVERY< string with 1-2 byte
> "string-type" information or an additional type flag in the
> zval-strcuture.
> Handling everything with zval's instead of objects would have the
> advantage,
> that database-layers like mysqlnd could write the database-encoding
> directly
> into the zval and the user had no need to decide what encoding is used.
>
> A new casting operator (binary) could then cast the string to a 1-byte
> array. But this is syntactical sugar over OOP-implementations - I don't
> know
> which one is the better choice.
>
> For example:
>
> $utf8_string = "Jägermeister"; // information of utf8 ist stored in the
> zval
>
> foreach ($utf8_string as $k => $v) // would iterate in byte mode
>
> foreach ((binary)$utf8_string as $k => $v) // would iterate in text mode
>
> over this:
> $utf8_obj = new ByteIterator("Jägermeister");
>
> foreach ($utf8_obj as $k => $v)
>
> foreach ($utf8_obj->toText() as $k => $v)
>
>
> I think the first one is easier and would be nicer to average developers
> (and lazy programmers like me ;o) )

You assume that string is in utf-8. It can be some iso-8859-x,
iso-2022-xx, utf-7, utf-16 or any other multibyte character set.

If you want to parse string in symbols, use mb_substr and mb_strlen, set
charset correctly and make sure that your string is in correct character
set, if PHP bug about inconsistent symbol position calculation is still
unfixed.

-- 
Tomas



-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to