Funktion strrev() - Umkehren von Zeichen eines Strings

Bei der Verarbeitung von Zeichenketten kann es manchmal notwendig sein, die Zeichen umzukehren. Ein typisches Beispiel hierfür ist ein Spiel, bei dem die Teilnehmer umgedrehte Wörter wieder in der richtigen Folge eingeben müssen. Für das Umkehren der Zeichen kann man die Funktion strrev() verwenden. Die Parameter werden dabei wie folgt angegeben.

  1. Die Zeichenkette, die umgekehrt werden soll (string).

Als Rückgabewert de Funktion erhält man die umgekehrte Zeichenkette. Beim folgenden Beispiel werden die Ziffern 0123456789 umgekehrt und die Ausgabe am Bildschirm ist 9876543210.

<?php

$str = '0123456789';

// Ausgabe 9876543210
echo strrev($str);

?>

Falls man die Zeichenkodierung UTF-8 verwendet, funktioniert strrev() nicht wie gewünscht. Beim folgenden Beispiel wird die Zeichenkette äöüßÄÖÜ zwar umgekehrt. Allerdings wird am Bildschirm �ÖÄßüöä� ausgegeben. Das resultiert dadurch, dass die Umlaute in UTF-8 nicht 1 Byte belegen sondern 2.

<?php

$str = 'äöüßÄÖÜ';

// Ausgabe �ÖÄßüöä�
echo strrev($str);

?>

Falls man die Zeichenkodierung UTF-8 verwendet, kann man eine eigene Funktion schreiben, damit auch die Umlaute oder andere Multibyte-Zeichen ohne Fehler umgekehrt werden. Hierbei gibt es verschiedene Lösungsansätze. Beim folgenden Beispielcode wird der Hauptteil unter anderem durch die Multibyte-Funktion mb_substr() erledigt.

<?php

function strrev_utf8 ($string, $encoding = null) {

  // Zeichenkodierung ermitteln
  if ($encoding === null) {
    $encoding = mb_detect_encoding($string);
  }

  // Länge des Strings ermitteln
  $length   = mb_strlen($string, $encoding);
  $strrev = '';

  // Zeichenweise $strrev zusammensetzen
  while ($length > 0) {
    $length--;
    $strrev .= mb_substr($string, $length, 1, $encoding);
  }

  return $strrev;
}

$str = 'äöüßÄÖÜ';

// Ausgabe ÜÖÄßüöä
echo strrev_utf8($str, 'UTF-8');

?>

Im ersten Abschnitt wird die Zeichenkodierung ermittelt. Entweder sie wurde mit der Funktion übergeben oder sie wird mit der Funktion mb_detect_encoding() ermittelt. Im nächsten Abschnitt wird die Länge der Zeichenkette mit mb_strlen() ermittelt. Hierbei erfolgt die Zählung anhand der Zeichenkodierung. Außerdem wird die Variable $strrev deklariert.

Der Hauptteil der Umkehrung erfolgt in der while-Schleife. Zunächst wird die Variable $length um 1 herunter gezählt. Danach wird mit der Funktion mb_substr() die Anzahl $length vom String abgeschnitten. Von der restlichen Zeichenkette werden wiederum alle Zeichen nach dem 1. Zeichen abgeschnitten. Im ersten Schleifendurchlauf würde das letzte Zeichen übrig bleiben, im zweiten Durchlauf das vorletzte etc. Die übriggebliebenen Zeichen werden bei jedem Schleifendurchlauf zur Variable $strrev hinzugefügt. Die Schleife wird solange durchlaufen, bis die Variable $length auf 0 herunter gesetzt wurde. Dadurch erhält man den Effekt der Umkehrung und der Rückgabewert der Funktion ist die Variable $strrev.