Tom: X-tes Zeichen in einem String ersetzen

Beitrag lesen

Hello,

Ich habe da einen String:

$variable="Satz. Noch ein Satz. Satz 3. Und hier ist der letzte Satz";

Nun bekomme ich $variable vorgesetzt und möchte den Punkt nach Satz 3 durch ein anderen Zeichen ersetzen. Wie ersetzen im Prinzip geht hab ich schon gelernt, aber wie ersetze ich nur den dritten Punkt und nicht alle?

Als erstes musst Du dazu wissen, in welcher Kodierung Dein String vorliegt.
PHP weiß dies leider nicht von alleine. Das String-Objekt hat in PHP noch einiges zu lernen ;-)

Also: Singlebytecode oder Multibytecode?

Danach richtet sich dann die Wahl der Funktionen, mit denen Du den String untersucheh und bearbeiten kannst.

Singlebyte: http://www.php.net/manual/en/ref.strings.php
Multibyte:  http://www.php.net/manual/en/ref.mbstring.php

Bei Single-Byte-Code kannst Du das auch generisch lösen, also (nahezu) ohne die Verwerwendung der fertigen Funktionen. Hab da mal eine kleine Betrachtung dazu gebastelt.

<?php  ### singlebyte.php ###  Datei abspeichern in ISO8859-1 !

$text = "Große grüne Luftballons fliegen öfter über die älteren Bäume. Man nennt sie Überflieger der Ältesten";
    $ruler ="0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";

echo "<pre>\r\n";

echo $text."\r\n";
    echo $ruler."\r\n";

echo "Länge: ".strlen($text)."\r\n";

echo "101. Zeichen: ".$text[101]."\r\n";

echo "Typ des 101. Zeichens: ".gettype($text[101])."\r\n";

echo "100. Zeichen ist vorhanden: ".(($text[99]  == '')?'true':'false')."\r\n";
    echo "101. Zeichen ist vorhanden: ".(($text[100] == '')?'true':'false')."\r\n";

### finde das dritte kleine 'ü'

$pos = 0;
    $count = 0;
    $found = false;
    $search = 'n';
    $quant  = 3;

while($pos < 1000)    ## es ginge auch 'while(true)'
    {
        $letter = $text[$pos];
        if ($letter == '')  { break; }

if ($letter == $search) { $count++; }
        if ($count  == $quant)
        {
           $found = true;
           break;
        };

$pos++;
    }

if ($found)
    {
        echo "Der $quant. Buchstabe '$search' befindet ich an Imndex-Position [$pos] im String\r\n";
    }
    else
    {
        echo "Es sind nur $count Buchstabe '$search' im String enthalten\r\n";
    }
?>

Wie das nun aber (ohne die speziellen Funktionen) mit einem Multibyte-String gehen könnte, ist mir nicht klar. Vermutlich gar nicht. Da der Index-Operator für einen MB-String nicht anders überladen ist, als für einen SB-String, kann PHP da nicht helfen, dneke ich.

Die Stringbehandlung mit extra mb_funktionen ist mMn der falsche Ansatz für das Problem. Man hätte nur einen Schalter für sb/mb einführen müssen und die Objekte (Funktionen) entsprechend anpassen können.

Liebe Grüße aus Syburg

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de