strlen() verzaehlt sich
am 11.04.2008 10:55:51 von Klaus Herzberg
Hallo,
strlen("dies ist ein ä-string"): 19
Korrekt waere 21. Auf 2 Server laeuft es korrekt. Aber auf dem einem
eben nicht. PHP Version 5.2.5. Aber daran allein kann es nicht liegen,
weil bspw. lokal mit der selben PHP-Version tritt der Fehler nicht auf.
Ich habe schon gelesen, dass strlen Probleme macht und
mb_string-Funktionen verwendet werden sollten, allerding
"--enable-mbstring" zeigt phpinfo an.
Einen Tipp?
Vielen Dank.
mfg. klaus.
Re: strlen() verzaehlt sich
am 11.04.2008 11:03:09 von Christian Mayer
Klaus Herzberg schrieb:
> Hallo,
>
> strlen("dies ist ein ä-string"): 19
>
> Korrekt waere 21. Auf 2 Server laeuft es korrekt. Aber auf dem einem
> eben nicht. PHP Version 5.2.5. Aber daran allein kann es nicht liegen,
> weil bspw. lokal mit der selben PHP-Version tritt der Fehler nicht auf.
>
> Ich habe schon gelesen, dass strlen Probleme macht und
> mb_string-Funktionen verwendet werden sollten, allerding
> "--enable-mbstring" zeigt phpinfo an.
>
> Einen Tipp?
>
> Vielen Dank.
> mfg. klaus.
Hi Klaus,
Mein Tipp: Selber eine Funktion schreiben, die den String zaehlt. ;)
"substr" waere da ein Ansatz.
--
Greetz,
Christian Mayer aka TheFox
http://fox21.at
Re: strlen() verzaehlt sich
am 11.04.2008 11:38:54 von steffen bruentjen
Klaus Herzberg wrote:
>strlen("dies ist ein ä-string"): 19
>
>Korrekt waere 21. Auf 2 Server laeuft es korrekt. Aber auf dem einem
>eben nicht. PHP Version 5.2.5. Aber daran allein kann es nicht liegen,
>weil bspw. lokal mit der selben PHP-Version tritt der Fehler nicht auf.
>
>Ich habe schon gelesen, dass strlen Probleme macht und
>mb_string-Funktionen verwendet werden sollten, allerding
>"--enable-mbstring" zeigt phpinfo an.
Das ist doch schonmal ganz gut.. Jetzt lies auch noch den
entsprechenden Abschnitt im Handbuch, und Du findest raus, dass Du
entweder
1. mb_strlen('ä', 'UTF-8');
oder
2. mb_internal_encoding('UTF-8');
mb_strlen('ä');
benutzen musst, oder, falls sich Deine Zeichen auf iso-8859-1 abbilden
lassen, Du auch alternativ
3. strlen(utf8_decode('ä'));
benutzen kannst oder Dir alternativ auch noch eine Änderung der
php.ini (mbstring.func_overload mind. auf 2) die Möglichkeit gibt,
weiterhin
4. strlen('ä')
zu verwenden. Oder aber du wartest auf
5. PHP 6.
Schöne Grüße, Steffen
--
Das Tastaturlayout für Programmierer:
http://eurkey.steffen.bruentjen.eu
Re: strlen() verzaehlt sich
am 11.04.2008 11:39:30 von Ralph Stahl
Klaus Herzberg schrieb:
> Hallo,
>
> strlen("dies ist ein ä-string"): 19
>
> Korrekt waere 21. Auf 2 Server laeuft es korrekt. Aber auf dem einem
> eben nicht. PHP Version 5.2.5. Aber daran allein kann es nicht liegen,
> weil bspw. lokal mit der selben PHP-Version tritt der Fehler nicht auf.
>
> Ich habe schon gelesen, dass strlen Probleme macht und
> mb_string-Funktionen verwendet werden sollten, allerding
> "--enable-mbstring" zeigt phpinfo an.
>
> Einen Tipp?
mb_strlen() könnte Dein Freund sein:
http://php.net/mb_strlen
Umlaute und sonstiges bestehen eben nicht nur aus 1 Byte, daher die
Verzählung. Gleiches gilt für alle anderem String-Funktionen wie zum
Bleistift mb_substr().
Ralph
mb_strlen verzaehlt sich, was: Re: strlen() verzaehlt sich
am 11.04.2008 12:07:41 von Klaus Herzberg
Hallo,
erstmal vielen Danke fuer die Hinweise.
Ich haette natuerlich noch schreiben koennen, dass ich die Funktion
strlen() unveraendert weiter benutzen muss, weil es eine Typo3-Seite ist
und ich den Quelltext nicht anpassen werden:)
Aber: Habe mbstring.func_overload auf 0 gesetzt. Jetzt zaehlt strlen
richtig. Daher getestet:
mb_strlen("dies ist ein ä-string"): 19
D.h. mb_strlen verzaehlt sich. Woran koennte das liegen?
Danke.
mfg. klaus.
Re: mb_strlen verzaehlt sich, was: Re: strlen() verzaehlt sich
am 11.04.2008 12:33:23 von Stefan+Usenet
On Fri, 11 Apr 2008 12:07:41 +0200 Klaus Herzberg wrote:
> mb_strlen("dies ist ein ä-string"): 19
> D.h. mb_strlen verzaehlt sich. Woran koennte das liegen?
Ad hoc haette ich gesagt: an der Einstellung fuer den von mb_*
verwendeten Zeichensatz. Aber 19 ist fuer diesen String schon
ein _sehr_ interessantes Ergebnis.
Hmpf. Leider ist das PHP-Manual gerade, aeh, irgendwie offline...
Servus,
Stefan
--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
2008! Das Jahr von Stefan. Unerhörter geht's kaum.
(Sloganizer)
Re: mb_strlen verzaehlt sich, was: Re: strlen() verzaehlt sich
am 11.04.2008 13:30:08 von Ralph Stahl
Klaus Herzberg schrieb:
> Hallo,
> erstmal vielen Danke fuer die Hinweise.
>
> Ich haette natuerlich noch schreiben koennen, dass ich die Funktion
> strlen() unveraendert weiter benutzen muss, weil es eine Typo3-Seite ist
> und ich den Quelltext nicht anpassen werden:)
>
> Aber: Habe mbstring.func_overload auf 0 gesetzt. Jetzt zaehlt strlen
> richtig. Daher getestet:
Wenn das "richtige" strlen() richtig zählt, ist es doch kein
utf-8-String, oder verstehe ich jetzt was falsch?
> mb_strlen("dies ist ein ä-string"): 19
19? Supi!
> D.h. mb_strlen verzaehlt sich. Woran koennte das liegen?
Vielleicht hilft Dir http://de3.php.net/manual/de/mbstring.overload.php
noch ein Stück weiter - vor allem die Info darin "may lead to undefined
behaviour" :-).
Ralph
Re: mb_strlen verzaehlt sich, was: Re: strlen() verzaehlt sich
am 11.04.2008 13:50:47 von Klaus Herzberg
Ralph Stahl wrote:
> Klaus Herzberg schrieb:
>> Hallo,
>> erstmal vielen Danke fuer die Hinweise.
>>
>> Ich haette natuerlich noch schreiben koennen, dass ich die Funktion
>> strlen() unveraendert weiter benutzen muss, weil es eine Typo3-Seite ist
>> und ich den Quelltext nicht anpassen werden:)
>>
>> Aber: Habe mbstring.func_overload auf 0 gesetzt. Jetzt zaehlt strlen
>> richtig. Daher getestet:
>
> Wenn das "richtige" strlen() richtig zählt, ist es doch kein
> utf-8-String, oder verstehe ich jetzt was falsch?
nein, das hast Du richtig erkannt. In dem Beispiel ist kein utf-8. Als
utf-8 sagt strlen "richtigerweise" 22.
Also:
utf-8:
mb_strlen("dies ist ein ä-string") = 21 (fein)
ansi/latin...
mb_strlen("dies ist ein ä-string") = 19 (schlecht)
>> mb_strlen("dies ist ein ä-string"): 19
>
> 19? Supi!
wieso?
>> D.h. mb_strlen verzaehlt sich. Woran koennte das liegen?
>
> Vielleicht hilft Dir http://de3.php.net/manual/de/mbstring.overload.php
> noch ein Stück weiter - vor allem die Info darin "may lead to undefined
> behaviour" :-).
Danke, schaue ich mir an.
mfg. klaus
Re: mb_strlen verzaehlt sich, was: Re: strlen() verzaehlt sich
am 11.04.2008 13:57:47 von Wolfgang Fellger
Klaus Herzberg schrieb:
>mb_strlen("dies ist ein ä-string"): 19
>
>D.h. mb_strlen verzaehlt sich. Woran koennte das liegen?
Der String ist in ISO-8859-1, wird aber fälschlich als UTF-8 interpretiert.
Das Ergebnis ist "dies ist ein ?tring" - Länge 19.
--
Wolfgang Fellger
Re: mb_strlen verzaehlt sich, was: Re: strlen() verzaehlt sich
am 11.04.2008 16:19:46 von Niels Braczek
Klaus Herzberg schrieb:
> mb_strlen("dies ist ein ä-string"): 19
>=20
> D.h. mb_strlen verzaehlt sich. Woran koennte das liegen?
Offensichtlich ist "ä-s" ein Sonderzeichen.
MfG
Niels
--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: mb_strlen verzaehlt sich, was: Re: strlen() verzaehlt sich
am 11.04.2008 19:07:39 von Claus Reibenstein
Niels Braczek schrieb:
> Klaus Herzberg schrieb:
>
>> mb_strlen("dies ist ein ä-string"): 19
>>
>> D.h. mb_strlen verzaehlt sich. Woran koennte das liegen?
>
> Offensichtlich ist "ä-s" ein Sonderzeichen.
Zumindest wird es offenbar so interpretiert.
Bei UTF-8 bestimmt das erste Byte, wie viele Bytes das Zeichen
definieren. Beginnt dieses Byte beispielsweise mit der Bitfolge 1110,
besteht das Zeichen aus 3 Bytes.
Gruß. Claus