HOWTO · PHP

Wie entfernt man das letzte Zeichen aus einer Zeichenkette in PHP

Dieser Artikel führt ein, wie man in PHP das letzte Zeichen aus einer Zeichenkette entfernt. Er enthält die rtrim()-Funktion und die substr()-Funktion. Entdecken Sie die besten Methoden zur Zeichenkettenmanipulation in PHP und verbessern Sie Ihre Programmierkenntnisse mit praktischen Beispielen und klaren Erklärungen.

Auf dieser Seite

Inhalt vom Ende einer PHP-Zeichenkette entfernen

Um Inhalt vom Ende einer PHP-Zeichenkette zu entfernen, wählen Sie die Funktion danach, was entfernt werden soll. Verwenden Sie rtrim(), um eine beliebige Anzahl abschließender Bytes zu entfernen, die zu einer angegebenen Zeichenmenge gehören. Verwenden Sie substr() mit einer Länge von -1, um die Zeichenkette mit Ausnahme ihres letzten Bytes zu behalten. PHP-Zeichenketten sind byteorientiert, verwenden Sie daher eine Multibyte-fähige Funktion, wenn mit „Zeichen“ ein vollständiges Unicode-Zeichen gemeint ist.

Verwenden Sie rtrim(), um eine abschließende Zeichenmenge zu entfernen

rtrim() entfernt Zeichen von der rechten Seite einer Zeichenkette, solange sie zu seinem zweiten Argument gehören, das als Zeichenmaske bezeichnet wird. Die Maske ist eine Menge zulässiger Zeichen, kein Suffix, das als eine vollständige Sequenz übereinstimmen muss. Die Funktion entfernt weiterhin Bytes aus dieser Menge, bis sie auf ein Byte trifft, das nicht in der Maske enthalten ist. Dadurch kann sie mehrere verschiedene abschließende Zeichen und wiederholte Kopien eines Zeichens entfernen.

Bei einem Wert, der mit einem von zwei Satzzeichen enden kann, wendet dieses vollständige Beispiel die Maske !? an:

<?php
$value = "report!?!!";
$clean = rtrim($value, "!?");
echo $clean, PHP_EOL;
report

Die abschließenden Ausrufezeichen und das Fragezeichen gehören alle zur Maske, sodass jedes vom Ende entfernt wird, bis das vorangehende t erreicht ist.

Verwenden Sie diese Methode, wenn die Regel lautet: „Abschließende Satzzeichen oder Füllzeichen aus dieser Menge entfernen.“ Geben Sie nur Zeichen an, die entfernbar sein sollen. Beispielsweise erlaubt die Maske !?., dass jede Sequenz dieser drei Zeichen am Ende entfernt wird; sie bedeutet nicht „das wörtliche Suffix !?. entfernen“. Wenn die Zeichenkette mit einem Zeichen außerhalb der Maske endet, bleiben dieses Zeichen und alles davor erhalten. Eine leere Zeichenkette bleibt leer.

Verwenden Sie substr(), um das letzte Zeichen zu entfernen

Bei einer ASCII-Zeichenkette, bei der genau ihr letztes Zeichen entfernt werden soll, behält substr($string, 0, -1) den Präfix und lässt das letzte Byte aus. Der Startoffset 0 beginnt am Anfang der Zeichenkette. Eine negative Länge zählt vom Ende zurück, sodass -1 den zurückgegebenen Teil ein Byte vor dem Ende enden lässt.

<?php
$string = "Hello World!";
$withoutLastByte = substr($string, 0, -1);
echo $withoutLastByte, PHP_EOL;
Hello World

Dieser Code lässt das letzte Byte aus, unabhängig davon, ob es ein Buchstabe, ein Satzzeichen oder ein Leerzeichen ist; anders als rtrim() prüft er den Wert des Bytes nicht.

PHP-Zeichenketten und substr() sind byteorientiert. In UTF-8 kann ein angezeigtes Zeichen mehrere Bytes verwenden, sodass das Entfernen eines Bytes von einer Zeichenkette, die mit einem Multibyte-Zeichen endet, eine unvollständige Bytefolge hinterlassen kann, statt ein vollständiges Zeichen zu entfernen. Um ein Unicode-Zeichen zu entfernen, verwenden Sie mb_substr($string, 0, -1, 'UTF-8'), wenn die Erweiterung mbstring aktiviert ist. Wählen Sie die Kodierung, die zu den Daten passt, wenn es sich nicht um UTF-8 handelt.

Wählen Sie den richtigen Ansatz und behandeln Sie Randfälle

Verwenden Sie rtrim(), wenn die Entfernungsregel eine Menge abschließender Zeichen benennt und möglicherweise mehrere davon entfernt. Verwenden Sie substr(), wenn die Regel darin besteht, eine feste Anzahl von Bytes unabhängig von ihren Werten zu verwerfen. Für einen einfachen ASCII-Wert und ein letztes Zeichen drückt substr($string, 0, -1) diese Absicht direkt aus. Geben Sie rtrim() für Füllmaterial aus mehreren möglichen Zeichen die genaue Maske an, die Sie möchten.

Beide Funktionen geben eine Zeichenkette zurück; keine ändert die ursprüngliche Variable an Ort und Stelle. Weisen Sie das Ergebnis zu, wenn späterer Code den bereinigten Wert benötigt. Berücksichtigen Sie vor der Auswahl einer Methode, ob die Eingabe leer sein kann, ob sich das Zielzeichen tatsächlich am Ende befindet und ob die Daten eine Multibyte-Kodierung verwenden. Die leere Zeichenkette bleibt bei beiden Operationen leer, während rtrim() ein nicht übereinstimmendes Ende unverändert lässt. substr() entfernt weiterhin ein Byte, ohne seine Bedeutung zu prüfen.

Eine praktische Regel lautet, rtrim() für eine abschließende Zeichenmenge und substr() für eine feste Byteanzahl zu verwenden. Wenn mit „Zeichen“ in Ihrer Anwendung ein vollständiger Unicode-Codepunkt gemeint ist, verwenden Sie die entsprechende Multibyte-Zeichenkettenfunktion und stellen Sie sicher, dass ihre Erweiterung und Kodierung konfiguriert sind. Diese Unterschiede helfen auch beim Anpassen der Beispiele: Ändern Sie die Maske, um festzulegen, welche abschließenden Bytes entfernt werden dürfen, oder ändern Sie die Länge von substr(), um festzulegen, wie viele Bytes ausgelassen werden sollen.