2010-05-08 13 views
5

Estaba viendo hoy las addslashes y addcslashes en php.net, pero no entendí cuál es la diferencia entre ellos y cuáles son los caracteres que escapan en estos dos.addslashes y addcslahes

<?php 
    $originaltext = 'This text does NOT contain \\n a new-line!'; 
    $encoded = addcslashes($originaltext, '\\'); 
    $decoded = stripcslashes($encoded); 
    //$decoded now contains a copy of $originaltext with perfect integrity 
    echo $decoded; //Display the sentence with it's literal \n intact 
?> 

Si comento los $ decodificado variable y echo $ codificada, consigo el mismo valor que está en la cadena original.

¿Alguien puede explicarme claramente la diferencia y el uso de estos dos?

Respuesta

15

addslashes que solo salga

comilla simple ('), comillas dobles ("), la barra invertida() y NUL

Puede utilizar addcslashes para escapar de un conjunto arbitrario de caracteres.

echo addcslashes("where's the party?", "party"); 

yeilds

¿Dónde está \ the \ p \ a \ r \ t \ y?

Esto puede ser útil cuando necesite crear caracteres de control arbitrarios, o para preparar datos para el transporte/uso en formatos arbitrarios. Por ejemplo, si quisiera escapar de la entrada del usuario antes de utilizarlo como parte de una expresión regular, se puede hacer lo siguiente

preg_match('/match something here plus' . addcslashes($userInput, ".\\+*?[^]($)") . '/', $foo); 

Sin embargo, esto es equivalente a quotemeta, pero esto es sólo un ejemplo.


Más explicación

A veces es confuso para la gente nueva al método, y en mi opinión en contra de la de facto establecido por el resto de la librería PHP para el segundo parámetro a ser una lista de cadenas, ya que esto no aparece en ningún otro lugar de la biblioteca (que yo sepa).

Tiene más sentido para algunas personas, y sería más conforme, si el segundo parámetro fuera una matriz.

echo addcslashes("where's the party?", array("p", "a", "r", "t", "y")); 

Se puede ayudar a algunos de visualizar de esta manera, que luego se puede transformar en lo siguiente:

echo addcslashes(
    "where's the party?", 
    implode("", array("p", "a", "r", "t", "y")) 
); 
+0

se ha perdido el t en "el";) – akamike

+0

Tienes razón. Fijo. –

+0

¿Cómo es que vienen las barras en? Donde y en las palabras ... estoy confundido. – Kevin

1

addcslashes se usa para escapar de los caracteres que pase como el segundo parámetro.

Si intenta leer the docs of stripcslashes, encontrará "Reconoce C-like \ n, \ r ..., representaciones octales y hexadecimales".

Cuestiones relacionadas