Foros del Web » Programando para Internet » PHP »

Sustituir " por \"

Estas en el tema de Sustituir " por \" en el foro de PHP en Foros del Web. Buenas!! tengo una web en la que un usuario tiene que introducir un texto de su elección. Como el texto puede contener el caracter " ...
  #1 (permalink)  
Antiguo 28/01/2016, 09:14
 
Fecha de Ingreso: marzo-2015
Mensajes: 66
Antigüedad: 4 años, 8 meses
Puntos: 0
Sustituir " por \"

Buenas!!

tengo una web en la que un usuario tiene que introducir un texto de su elección. Como el texto puede contener el caracter " necesito que al coger el texto para guardarlo en una base de datos, el caracter " sea sustituido por \".

De forma práctica:
el usuario introduce: ...fue entonces cuando él dijo: "manana nos vemos", y se marcho...
y en la base de datos debe almacenarse: ...fue entonces cuando él dijo: \"manana nos vemos\", y se marcho...

No consigo hacerlo, he probado con str_replace, pero no hay manera... si tiene que sustituir cualquier otra cosa lo hace, pero el caracter " por \" no...

Alguien tiene idea de como puedo solucionar esto? a alguien le paso lo mismo?

Muchas gracias!!!!
  #2 (permalink)  
Antiguo 28/01/2016, 09:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 8 meses
Puntos: 2534
Respuesta: Sustituir " por \"

Cita:
necesito que al coger el texto para guardarlo en una base de datos, el caracter " sea sustituido por \".
Entonces necesitas usar la función de escape apropiada para tu motor de base de datos, pues reemplazar por ti mismo es una pérdida de tiempo, consulta el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 28/01/2016, 09:42
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 626
Antigüedad: 15 años, 10 meses
Puntos: 69
Respuesta: Sustituir " por \"

Mira esto que es lo que necesitas. Ahí mismo comentan la existencia de funciones de escape de caracteres para bases de datos, échales una mirada.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #4 (permalink)  
Antiguo 28/01/2016, 09:55
 
Fecha de Ingreso: marzo-2015
Mensajes: 66
Antigüedad: 4 años, 8 meses
Puntos: 0
Respuesta: Sustituir " por \"

Muchas gracias por las respuestas.

La verdad es que antes de preguntar en el foro probe bastantes cosas y entre ellas esta la función addslashes que no me funciona correctamente.

Cuando almaceno la cadena de texto en la base de datos se muestra en mysql sin la barra invertida \ y al volver al extraer la cadena se extrae tambien sin la barra invertida.

Lo que necesito es poder guardar y despues extrarer la cadena de texto y que se muestre \" en todo momento.

Muchas gracias!!!
  #5 (permalink)  
Antiguo 28/01/2016, 09:59
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 626
Antigüedad: 15 años, 10 meses
Puntos: 69
Respuesta: Sustituir " por \"

Viste el resto de funciones de escape? las específicas para mysqli? en la misma página de addslashes se refieren a ellas. Revisa la documentación de cada una. A veces hay que hacer mezcla de varias o a veces con una sola.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #6 (permalink)  
Antiguo 28/01/2016, 09:59
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 8 meses
Puntos: 2534
Respuesta: Sustituir " por \"

Cita:
La verdad es que antes de preguntar en el foro probe bastantes cosas y entre ellas esta la función addslashes que no me funciona correctamente.
Por favor lee lo que te han indicado, ni siquiera addslashes() es la función correcta.

Necesitas usar la función apropiada de escape de tu motor de BD.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 28/01/2016, 10:45
 
Fecha de Ingreso: julio-2011
Ubicación: Los Rios
Mensajes: 138
Antigüedad: 8 años, 4 meses
Puntos: 8
Respuesta: Sustituir " por \"

Lo que los compañeros preguntan es:
¿Que base de datos usas?
deberas usar dependiendo de eso funciones como:

$variable = mysqli_real_escape_string($conexion, $variable);

Revisa tus manuales dependiendo de la base de datos y de las extensiones utilizadas, en el caso del ejemplo que te puse el manual es este:

MANUAL DE REAL_ESCAPE
__________________
___________________________
Si te ayudo mi respuesta dale al +1
  #8 (permalink)  
Antiguo 03/02/2016, 07:55
 
Fecha de Ingreso: marzo-2015
Mensajes: 66
Antigüedad: 4 años, 8 meses
Puntos: 0
Respuesta: Sustituir " por \"

Buenas!!
muchas gracias por todas las respuestas y lamento contestar tan tarde, no he tenido oportunidad de probarlo hasta ahora.

He probado con la función:
$cadena_escapada = mysql_real_escape_string($cadena, $conexion);

Pero creo que el problema es que al visualizar los datos introducidos en la base de datos desde MySQL se muestra sin escapar, porque he probado a verla mostrando un mensaje por consola y efectivamente se muestra escapada.

Lo que necesito es que se muestre en todo momento escapada, pq al volver a pedir los datos a la base de datos y mostarlos por ejemplo en la web las barras invertidas desaparecen, necesitaría que se mostrán también al realizar la consulta.

Alguna idea de como podría ser?

Muchas gracias!!
  #9 (permalink)  
Antiguo 03/02/2016, 09:31
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 8 meses
Puntos: 2534
Respuesta: Sustituir " por \"

Cita:
Lo que necesito es que se muestre en todo momento escapada, pq al volver a pedir los datos a la base de datos y mostarlos por ejemplo en la web las barras invertidas desaparecen, necesitaría que se mostrán también al realizar la consulta.

Alguna idea de como podría ser?
El propósito de escapar los datos no es ese, lo que buscas hacer carece de sentido.

Al leer los datos siempre vendrán íntegros y sin escapes.

Ya se que al mostrarlos vienen sin escape pero entonces al momento de realizar tus consulta, siempre debes escapar los datos.

No significa que escapándolos una vez no tengas que hacerlo de nuevo.

Escapar datos es una práctica estándar cuando se realizan operaciones en base de datos, no debería estorbarte eso, y si te estorba entonces algo estás haciendo muy mal.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 03/02/2016, 09:47
 
Fecha de Ingreso: marzo-2015
Mensajes: 66
Antigüedad: 4 años, 8 meses
Puntos: 0
Respuesta: Sustituir " por \"

Me ha encantado la respuesta de que carece de sentido... hehe
No dudo que esto carezca de sentido, pero quien toma las decisiones es otra persona a la que esto le resulta con sentido, me limito a tratar de hacer en la medida de lo posible lo que me solicitan con los datos.

Gracias por tu sinceridad y por la respuesta, pero como dije en el primer post del hilo lo que necesito es que en la base de datos las comillas dobles aparezcan como \" y que al hacer una consulta a la base de datos retorne \".

De forma práctica:
- El usuario introduce: "super oferta"
- En la base de datos se almacena: \"super oferta\"
- Tras una consulta a la base de datos para mostrarlo por ejemplo en una web retorna: \"super oferta\"

Alguna otra idea para poder hacer esto?

Gracias!!
  #11 (permalink)  
Antiguo 03/02/2016, 10:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 8 meses
Puntos: 2534
Respuesta: Sustituir " por \"

Está bien, no voy a juzgar "los requerimientos" de nadie aunque me parezca una tontería.

En fin, podrías usar addslashes() o addcslashes() para escapar (redundantemente) las comillas o cualquier carácter que desees.

Eso sí, no te libera de escapar la consulta para que se mantenga todo en orden.

PDTA: de verdad me gustaría que nos expliques la razón de por qué necesitas que los datos permanezcan así.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #12 (permalink)  
Antiguo 03/02/2016, 17:37
 
Fecha de Ingreso: septiembre-2008
Mensajes: 350
Antigüedad: 11 años, 3 meses
Puntos: 31
Respuesta: Sustituir " por \"

con las funciones que menciona pateketrueke

pero con str_replace también se puede como ya lo intentaste y no te salio
prueba el código de abajo a ver si te sale asi como aqui en el foro

Código PHP:
<?php 
$h 
'(Sustituir &quot; por " )--->
De forma práctica:
- El usuario introduce: "super oferta"
- En la base de datos se almacena: "super oferta"
- Tras una consulta a la base de datos para mostrarlo por ejemplo en una web retorna: "super oferta"

Alguna otra idea para poder hacer esto?'
."--> 'Con una sola'";
$rb "&-#92;";//Reverse backslash
$h str_replace ('"'"$rb&quot;"$h);
$h str_replace ("'""$rb&apos;"$h);
$h str_replace ("\n""<br />"$h);
echo 
$h;
?>
Parese que el foro me reemplaza en la variable $rb quita el - antes de probar el codigo
y tambien como pateketrueke me pregunto lo mismo
__________________
╬-----╬
║☺₧☻║
╬-----╬

Última edición por thezzin; 03/02/2016 a las 17:44
  #13 (permalink)  
Antiguo 04/02/2016, 04:37
 
Fecha de Ingreso: marzo-2015
Mensajes: 66
Antigüedad: 4 años, 8 meses
Puntos: 0
Respuesta: Sustituir " por \"

Buenas!!! muchas gracias por las respuestas.

Con el codigo de thezzin quedo totalmente solucionado y a la vueta de la bd deshago los cambios y se vuelve a mostar como necesitaba.

Como dije ayer yo no tengo motivos para hacerlo de este modo, por tanto poco puedo explicar, sobn las oredenes que he recibido. Propuse la solucion de escapar las dobles comillas con mysql_real_scape y la respuesta que recibi fue que eso no era lo que me habian pedido, querian que apareciera tal cual como os he contado. Lamento no poder dar más inforamacón, carezco de ella...

Un saludo!!!

Etiquetas: sustituir
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:54.