2010-05-02 13 views
5

¿Cómo debo agregar barras oblicuas a solo comillas simples e ignorar las comillas dobles? Estoy usando php. Solo me gustaría escapar de las comillas simples para evitar que se rompan mis consultas php mysql.¿Cómo debo agregar barras oblicuas a solo comillas simples e ignorar las comillas dobles?

¡Gracias!

Edit: Estoy pensando en buscar y reemplazar una expresión regular será de lo más útil.

+4

Recuerde las palabras de Jamie Zawinski : Algunas personas, cuando se enfrentan con un problema, piensan "Lo sé, usaré expresiones regulares". Ahora ellos tienen dos problemas. –

Respuesta

2

Bueno, preg_replace_all("/([^\])'/","$1\'",$yourStrHere) va a hacer lo que preguntas:

  • "/ ([^ \])" /" se obtiene la expresión regular/([^ \]) ​​'/, que dice" que coincida con el cualquier personaje que no sea una barra invertida seguida de una comilla simple, y capture el caracter antes de la cita ".
  • "$ 1 \ '" dice 'reemplazar con el carácter capturado seguido de una barra invertida y una comilla simple'

PERO ...

respuesta de Bill acerca de las consultas parametrizados utilizando el mysqli o API de PDO es Realmente, realmente un buen consejo. Es más fácil y más efectivo dejar que la API de su base de datos maneje esto que hacerlo usted mismo: las personas que escribieron estas API (y las personas que trabajaron en los back-end nativos para esas API) probablemente hayan dedicado más tiempo y esfuerzos para abordar la seguridad y problemas de rendimiento que la mayoría de nosotros podemos esperar gastar nosotros mismos.

+0

Gracias a todos por la ayuda. Realmente aprecio todos los consejos y las respuestas, irán por buen camino. – atwellpub

4

Use mysql_real_escape_string. Solo se escapa de los caracteres requeridos al considerar la codificación de caracteres de su conexión MySQL.

+0

mysql_real_escape_string ($ variable); aún escapa comillas dobles – atwellpub

+0

MySQL insertará correctamente el "en lugar de la \" en la fila. cuando lo SELECCIONE, aparecerá como "y no \". – Reece45

+0

Después de ejecutar \t mysql_real_escape_string ($ variable); y luego colocando la variable en una consulta; Revisé mi phpmyadmin y tanto las comillas simples como las dobles se escapan en la entrada. – atwellpub

1

Si usa parámetros de consulta para valores dinámicos, no necesita hacer ningún escape en absoluto.

Puede usar parámetros de consulta en la extensión mysqli o en la extensión PDO (prefiero PDO). La antigua extensión mysql no admite parámetros de consulta.

4

Un simple str_replace("'", "\\'", $string) debería funcionar. Pero como Gumbo declaró anteriormente, debe usar las funciones de la biblioteca si está intentando escapar de las consultas de MySQL.

+0

Esta es la mejor respuesta para no consultas; al menos para mí que está haciendo generación de archivos de clase. Al ver la expresión regular, estaba a punto de publicar 'str_replace ('\' ',' \\\ '', $ str)' hasta que noté esto. Acabo de utilizar comillas simples para evitar invocar la comprobación de expresión para comillas dobles. –

11

Bien, ya llegué muy tarde a esta publicación, pero agregué esta respuesta con la esperanza de que pueda ayudar a alguien a llegar a esta pregunta. Mientras @Weston C ha dado una solución expresiones regulares, hay una función de PHP para hacer esto- addcslashes (http://php.net/manual/en/function.addcslashes.php):

string addcslashes (string $str , string $charlist) 
Returns a string with backslashes before characters that are listed in charlist parameter. 
Cuestiones relacionadas