2011-09-27 10 views

Respuesta

8

Para completar la respuesta de Carlos, que tenía un caso en el que el El carácter ETX no estaba al final de la línea, así que tuve que usar el siguiente código:

$string = preg_replace('/\x03/', '', $string); 

Simplemente elimine el signo $.

0

En un rtrim guess ($ var, "\ c"); o preg_replace ("/ \ c + \ $ /", '', $ var);

1

El ETX es un personaje de control, lo que significa que debemos esforzarnos un poco para que exista.

desde el modo interactivo PHP:

php > $borked = "Hello, have an ETX:" . chr(3); 
php > print_r($borked); 
Hello, have an ETX: 
php > var_export($borked); 
'Hello, have an ETX:' 
php > echo urlencode($borked); 
Hello%2C+have+an+ETX%3A%03 
php > var_dump(preg_match('/' . chr(3) . '/', $borked)); 
int(1) 
php > var_dump(preg_match('/' . chr(3) . '$/', $borked)); 
int(1) 
php > echo urlencode(preg_replace('/' . chr(3) . '$/', '', $borked)); 
Hello%2C+have+an+ETX%3A 

En otras palabras, se puede inyectar, básicamente, sólo el carácter en la cadena de expresiones regulares. Ahora bien, este podría contraproducente. Esta técnica puede ser contraproducente en función de conjuntos de caracteres y otras cosas horribles.

Además de chr(3), también puede probar urldecode('%03') para producir el personaje. También puede utilizar una sintaxis especial de escape, tal como aparece en la PCRE syntax pages: /\x03$/

He aquí una función para la que, utilizando ese último método:

function strip_etx_at_end_of_string($string) { 
    return preg_replace('/\x03$/', '', $string); 
} 
Cuestiones relacionadas