How to remove the last character from a string in PHP

lavary

Reza Lavarian

Posted on February 6, 2023

How to remove the last character from a string in PHP

Update: This post was originally published on my blog decodingweb.dev, where you can read the latest version for a 💯 user experience. ~reza

How do you remove the last character from a string in PHP? Most web developers face it at one time or another; It can be a white space, a trailing slash in a HTTP URL, the last comma in a comma-separated list, or even a new line characters (\n).

Luckily, PHP has plenty of string manipulation functions you can use to get rid of that last character.

In this quick guide, we’ll try three ways of removing the last character(s) from a string in PHP.

Let’s begin with my favorite option rtrim() a.k.a the right trim.

Remove the last character by PHP rtrim()

PHP rtrim() accepts two arguments: the input string and characters you wish to be stripped from the end of the input string.

For instance, to remove the last comma in a comma-separated list:

<?php

$var = 'Banana, apple, orange, ';
$trimmed = rtrim($var, ', ');

var_dump($trimmed);

// output: string(21) "Banana, apple, orange"
Enter fullscreen mode Exit fullscreen mode

Let's see a more realistic example; A common reason to remove the last character from a string is to remove the trailing slash in a URL.

Imagine you have a function that accepts a URL prefix as an argument. This function adds a path (e.g., /api/v2) to the URL prefix and returns the result.

<?php

function getApiUrl($baseUrl) 
{
    return $baseUrl . '/api/v2';
}

$apiUrl = getApiUrl('https://decodingweb.dev/');
var_dump($apiUrl);

// output: string(31) "https://decodingweb.dev//api/v2"
Enter fullscreen mode Exit fullscreen mode

The problem with the above approach is that if the $baseUrl contains a trailing slash, you might end up with double slashes in the result.

You can simply avoid double slashes with rtrim() like so:

<?php

function getApiUrl($baseUrl) 
{
    return rtrim($baseUrl, '/') . '/api/v2';
}

$apiUrl = getApiUrl('https://decodingweb.dev/');
var_dump($apiUrl);

// output: string(31) https://decodingweb.dev/api/v2
Enter fullscreen mode Exit fullscreen mode

But what if you needed to remove a number of characters from the end of the string (regardless of what they are)? Please read on.

Remove the last character by PHP substr()

One way to strip the last character in a string is by using the PHP substr() function.

The substr() function returns a portion of a string based on an offset and length (number of characters).

<?php

$var = 'abcdef';
$trimmed = substr($var, 0, 2);

var_dump($trimmed);

// output: string(2) "ab"
Enter fullscreen mode Exit fullscreen mode

In the above example, the offset is 0 (the first character), and the length is 2, which is the number of characters counting from the offset.

And the result is ab.

The offset can also take a negative value! When the offset is negative, the count will begin from the end of the string. Saying that -1 means the last character from the end of the string. The value -2 means the last two characters, and so forth.

That sounds like what we need! Let's see an example.

<?php

$baseUrl = 'http://decodingweb.dev/';

var_dump(substr($baseUrl, 0, -1));

// output:  string(22) "http://decodingweb.dev"
Enter fullscreen mode Exit fullscreen mode

And if you want to remove the last three characters from a string:

<?php

$string = 'abcdf';
$trimmed = substr($string, 0, -3)

var_dump($trimmed);

// output: string(2) "ab"
Enter fullscreen mode Exit fullscreen mode

Or even remove the last five characters from the string:

<?php

$string = 'abcdf';
$trimmed = substr($string, 0, -5)

var_dump($trimmed);

// output: string(0) 
Enter fullscreen mode Exit fullscreen mode

The above example will return an empty string.

You can also use substr() to check the last character in a string, like so:

<?php

$string = 'abcdf';

var_dump(substr($string, -1, 1));

// output: string(1) f
Enter fullscreen mode Exit fullscreen mode

How about the multi-byte characters?

Each character in English takes one byte. However, many UTF-8 characters take more than one byte, called multi-byte characters. For instance, accents over characters such as ä, é, or even an emoji 🍏 takes more than a byte.

The offset and length in substr() function won't handle multi-byte characters as expected because they assume one byte per character.

Let's see it in an example:

<?php

$var = 'Cartão de Crédito';
$trimmed = substr($var, 2, 6);

var_dump($trimmed);

// output: string(21) string(6) "rtão "
Enter fullscreen mode Exit fullscreen mode

In the above example, the offset=2 and length=6 is supposed to return rtão d. However, the returned value is rtão. The reason is ã is a multi-byte character, and substr() function isn't aware of it!

Luckily, PHP has a multi-byte safe substr() alternative: mb_substr():

<?php

$var = 'Cartão de Crédito';
$trimmed = mb_substr($var, 2, 6);

var_dump($trimmed);

// output: string(7) "rtão d"
Enter fullscreen mode Exit fullscreen mode

Remove the last character by PHP substr_replace()

Another method to remove the last character from a string in PHP is by using the substr_replace() function.

Just like substr(), this function accepts a position and offset too. However, unlike substr() - which returns a substring - substr_replace() replaces the substring with a replacement value.

Let's make it clear with an example:

<?php

$var = 'This is a test';
$newVar = substr_replace($var, 'that', 0, 4);

var_dump($newVar);

// output: string(14) "that is a test"
Enter fullscreen mode Exit fullscreen mode

In the above example, offset=0 and length=4 refers to "This" in our string. And in this case, "This" is replaced with the word "That".

As a result, the output would be: "That is a test".

Now, what if we can target the last character and replace it with an empty string?

We can! Let's see how:

<?php

$baseUrl = 'http://decodingweb.dev/';

var_dump(substr_replace($baseUrl, '', -1));

// output:  string(22) http://decodingweb.dev
Enter fullscreen mode Exit fullscreen mode

We set the offset to -1 (the last character) and replaced it with an empty string (''). Just like that!

Wrapping up

As you see, PHP is great at string manipulation, thanks to the functions we can use from the standard library.

I hope this quick guide gave you the answer you were looking for.

Thanks for reading.

💖 💪 🙅 🚩
lavary
Reza Lavarian

Posted on February 6, 2023

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

How to Use Global Scope in Laravel
laravel How to Use Global Scope in Laravel

November 17, 2024

My Journey into Learning PHP
webdev My Journey into Learning PHP

November 14, 2024

How PHP Works - Behind The Scene
php How PHP Works - Behind The Scene

November 12, 2024

Understanding PHP Types - NULL
php Understanding PHP Types - NULL

October 20, 2024