Remove control characters from PHP string

php, regex, string

Solution

If you mean by control characters the first 32 ascii characters and `\x7F` (that includes the carriage return, etc!), then this will work:

preg_replace('/[\x00-\x1F\x7F]/', '', $input);

(Note the single quotes: with double quotes the use of `\x00` causes a parse error, somehow.)

The line feed and carriage return (often written `\r` and `\n`) may be saved from removal like so:

preg_replace('/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F]/', '', $input);

I must say that I think Bobby's answer is better, in the sense that `[:cntrl:]` better conveys what the code does than `[\x00-\x1F\x7F]`.

WARNING: `ereg_replace` is deprecated in PHP >= 5.3.0 and removed in PHP >= 7.0.0!, please use `preg_replace` instead of `ereg_replace`:

preg_replace('/[[:cntrl:]]/', '', $input);

Problem

How can I remove control characters like STX from a PHP string? I played around with ``` preg_replace("/[^a-zA-Z0-9 .\-_;!:?äÄöÖüÜß<>='\"]/","",$pString) ``` but found that it removed way to much. Is there a way to remove only control chars?

Original source

Related problems