Forum Doku Wiki Blog

Forumsarchiv 2011, April
strlen bei Sonderzeichen - danach auf Index zugreifen

archivierte Beiträge lesen

  1. (PHP) strlen bei Sonderzeichen - danach auf Index zugreifen von Theo24, 11. 04. 2011, 19:32

strlen bei Sonderzeichen - danach auf Index zugreifen

Der folgende Beitrag wurde am 11. 04. 2011, 19:32 Uhr von Theo24 veröffentlicht.

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

strlen bei Sonderzeichen - danach auf Index zugreifen

Der folgende Beitrag wurde am 11. 04. 2011, 19:43 Uhr von ChrisB veröffentlicht.

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


--
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?

strlen bei Sonderzeichen - danach auf Index zugreifen

Der folgende Beitrag wurde am 11. 04. 2011, 20:15 Uhr von Theo24 veröffentlicht.

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
>
>

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4