Usando las clases de caracteres POSIXPHP coincide con los caracteres de control pero no con el espacio en blanco?
Cómo hacer coincidir [: cntrl:] pero excluyendo el [: espacio:]?
$message = ereg_replace("[[:cntrl:]]", "", $message);
Usando las clases de caracteres POSIXPHP coincide con los caracteres de control pero no con el espacio en blanco?
Cómo hacer coincidir [: cntrl:] pero excluyendo el [: espacio:]?
$message = ereg_replace("[[:cntrl:]]", "", $message);
Las funciones de ereg_ * (POSIX) han quedado obsoletas desde hace mucho tiempo. No deberías continuar usando estos métodos.
Según POSIX Bracket Expressions[:cntrl:]
resuelve el rango ASCII [\x00-\x1F\x7F]
(o el Unicode \p{Cc}
) y [:space:]
resuelve [ \t\r\n\v\f]
. Utilizando asciitable.com para resolver esos caracteres, se queda con una lista de exclusión de [\x20\x09-\x0D]
. "Haciendo los cálculos" le quedan [\x00-\x08\x0E-\x1F\x7F]
. y que te deja con la siguiente, PHP 5.3 y compatible hacia arriba, sanitización:
$message = preg_replace('/[\x00-\x08\x0E-\x1F\x7F]+/', '', $message);
Tenga en cuenta que VT
(Tab vertical) y FF
(Avanza, Nueva página) también se conservan. Dependiendo de su situación es posible que desee quitar éstos, también:
$message = preg_replace('/[\x00-\x08\x0E-\x1F\x7F\x0A\x0C]+/', '', $message);
[[:cntrl:]]
es básicamente [\x00-\x1f\x7F]
y [[:space:]]
es equivalente a [ \t\r\n\v\f]
(ref), por lo que el método a largo mano sería utilizar [\x00-\x08\x0E-\x1F\7F]
(el espacio es 0x20 y fuera de la gama CNTRL, \t\r\n\v\f
son \ x09 a \ x0D)
definen caracteres "inseguros" –
definir "escapar" –
He actualizado la pregunta, gracias. – Howard