strlen bei Sonderzeichen - danach auf Index zugreifen
Theo24
- php
Guten Abend allerseits,
ich habe ein assoziatives Array mit Sonderzeichen (key), die beim SMS-Versand eine bestimmte Anzahl Zeichen einnehmen (value):
$chars = array("@"=>1,"$"=>1,"€"=>2);
Nun möchte ich in einem String jeden Buchstaben überprüfen, wieviele Zeichen er einnimmt. Das mache ich so:
$strl = strlen($text);
for ($i = 0;$i < $strl; $i++){
$c = $text{$i};
if (isset($chars[$c]))
$count += $chars[$c];
}
Das Problem: Einige Sonderzeichen bestehen "aus mehrereren Zeichen". So ist strlen("€") = 3. Das bedeutet das durchiterieren mit $text{$i} funktioniert nicht richtig, weil $text{$i} nur "ein Drittel" des Zeichens bekommt.
Mit mb_strlen($text,"UTF-8") bekomme ich immerhin die "richtige" Länge (also 1), aber das Euro-Zeichen bleibt trotzdem in 3 Teile unterteilt (0xe2, 0x82 und 0xac vgl. http://www.fileformat.info/info/unicode/char/20ac/index.htm).
Was kann ich tun, damit ich per Index auf das Eurozeichen im String $text zugreifen kann?
Herzlichen Dank
Hi,
Das Problem: Einige Sonderzeichen bestehen "aus mehrereren Zeichen".
Nein, sie bestehen aus mehreren *Bytes*.
Mach dir den Unterschied bitte klar - er ist extrem wichtig.
Was kann ich tun, damit ich per Index auf das Eurozeichen im String $text zugreifen kann?
Bspw. die mbstring-Funktionen, die du ja schon entdeckt hast, nutzen - mb_substr wäre eine Möglichkeit.
MfG ChrisB
Oh Mann, mit mb_substr hatte ich es vorhin schon probiert - aber offenbar das encoding nicht gesetzt. Dann hat es natürlich nicht funktioniert.
So geht es jetzt aber (vielen Dank Chris!)
$text = "€";
$chars = array("@"=>1,"$"=>1,"€"=>2);
$count = 0;
$strl = mb_strlen($text,"UTF-8");
for ($i = 0;$i < $strl; $i++){
$c = mb_substr($text,$i,$i+1,"UTF-8");
if (isset($chars[$c]))
$count += $chars[$c];
}
Hi,
Das Problem: Einige Sonderzeichen bestehen "aus mehrereren Zeichen".
Nein, sie bestehen aus mehreren *Bytes*.
Mach dir den Unterschied bitte klar - er ist extrem wichtig.Was kann ich tun, damit ich per Index auf das Eurozeichen im String $text zugreifen kann?
Bspw. die mbstring-Funktionen, die du ja schon entdeckt hast, nutzen - mb_substr wäre eine Möglichkeit.
MfG ChrisB