Remove control characters from PHP string
For Unicode input, this will remove all control characters, unassigned, private use, formatting and surrogate code points (that are not also space characters, such as tab, new line) from your input text. I use this to remove all non-printable characters from my input.
<?php
$clean = preg_replace('/[^\PC\s]/u', '', $input);
for more info on \p{C}
see http://www.regular-expressions.info/unicode.html#category
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);