RSS Amplifier

Benjamin Crozat's blog posts · Mar 20, 2026

How to trim strings in PHP with trim()

0
Sign in to vote or save

Benjamin Crozat · Benjamin Crozat's blog

Published
Mar 20, 2026

Benjamin Crozat Written by
Benjamin Crozat

0
comments

Introduction

Use trim() when you need to remove whitespace or other characters from both ends of a string in PHP.

$name = trim($_POST['name'] ?? '');

That is the quick answer, but there are a few gotchas worth knowing early:

  • trim() only affects the beginning and end of the string
  • it returns a new string instead of changing the original variable
  • the second argument is a character mask, not an exact substring
  • Unicode whitespace such as non-breaking spaces may survive, which is where mb_trim() becomes useful on PHP 8.4+

This guide focuses on those real-world cases instead of stopping at the syntax.

How to use trim() in PHP

The signature looks like this:

trim(string $string, string $characters = " \n\r\t\v\0"): string

What the arguments mean:

  • $string: the input you want to clean up
  • $characters: the optional set of characters PHP should strip from both ends

Without the second argument, trim() removes the default edge whitespace characters:

  • ordinary spaces
  • tabs
  • new lines
  • carriage returns
  • NUL bytes
  • vertical tabs

That makes it useful for form input, CLI input, file lines, and request path cleanup.

The most useful trim() examples

Clean form input before validation

This is the everyday use case:

$name = trim($_POST['name'] ?? '');

If the field may be missing, the ?? '' matters. It gives trim() a string instead of null.

If you are still sorting out those tiny PHP checks around missing inputs, this isset() guide is a useful companion.

Remove the trailing newline from a file line

$line = trim(fgets($handle));

That removes the \n or \r\n that often comes from file reads.

If you only want to remove the right side and leave leading spaces alone, use rtrim() instead.

Remove slashes from both ends of a path

$path = trim('/docs/laravel/', '/');
echo $path;

This is handy when you need a normalized path segment.

If you are starting from a full URL rather than a plain path, parse the URL first instead of trimming blindly.

Remove quotes or other wrapper characters

$value = trim('"Laravel"', "\"'");
echo $value;

This works because the second argument can contain multiple characters PHP should strip from both ends.

Remove ASCII control characters

The PHP manual notes that you can trim a range of characters too:

$value = "\x00\x1FHello\x1E";
echo trim($value, "\x00..\x1F");

That is useful when input arrives from a messy external source.

The biggest trim() gotcha: the second argument is a character mask

This is the part that trips people up most often.

The second argument is not treated as one exact prefix or suffix. PHP treats it as a set of individual characters to strip while they keep appearing at either edge.

Example:

echo trim('foobar', 'bar');

That does not mean “remove the exact word bar once.” It means “keep removing b, a, or r from the left and right edges until none remain.”

The same rule explains this result:

echo trim('abcHelloabc', 'abc');

That behavior is powerful once you know it, but it is also why trim() can feel surprising at first.

Why trim() sometimes seems not to work

Most confusion comes from one of these three situations.

It only trims the edges

trim() does not touch whitespace in the middle of the string:

echo trim("Hello   World");

If the extra whitespace is inside the string, trim() is the wrong tool.

It returns a new string

This does nothing useful:

$name = ' Laravel ';
trim($name);
echo $name;

You need to assign the result:

$name = trim($name);

The whitespace is Unicode, not plain ASCII

The classic example is a non-breaking space copied from HTML or a CMS.

$value = "\u{00A0}Laravel\u{00A0}";
var_dump(trim($value) === $value);
var_dump(mb_trim($value));

On PHP 8.4+, mb_trim() is the cleaner answer for multibyte whitespace.

If you are on an older PHP version, a Unicode-aware fallback looks like this:

$value = preg_replace('/^[\p{Z}\s]+|[\p{Z}\s]+$/u', '', $value);

That is usually only worth it when you know copied content or multilingual text is involved.

trim() vs ltrim() vs rtrim()

These functions are the same basic tool with different sides enabled:

Function What it removes
trim() both ends
ltrim() left side only
rtrim() right side only

Examples:

echo trim('  Laravel  ');
echo ltrim('  Laravel  ');
echo rtrim('  Laravel  ');

Use trim() when you want a general cleanup step.

Use ltrim() or rtrim() when one side is meaningful and should stay untouched.

When trim() is the right tool

trim() is a good default when:

  • you are cleaning user input before checking whether it is blank
  • you want to normalize a path or identifier by removing wrapper characters
  • you are stripping line endings from file or CLI input
  • the whitespace is ordinary ASCII edge whitespace

It is not the right tool when:

  • you need to remove whitespace in the middle of the string
  • you need to remove one exact substring rather than a set of characters
  • you are dealing with Unicode edge whitespace and are on PHP 8.4+ where mb_trim() is clearer

Conclusion

trim() is simple once you know its boundaries. It removes edge whitespace well, but it does not change the middle of the string, it does not mutate the original variable, and its second argument is a character mask rather than an exact word match.

If you are still cleaning up PHP input after this, these are the next reads I would keep open:

Read the original on benjamincrozat.com

Comments

Nothing yet. Say the first thing.

    Sign in to join the conversation.