[Ayuda] Apostrofe y búsquedas en php mysql

Estado

🔒 Este tema está cerrado para nuevas respuestas.

⏰ Solo el creador del tema puede solicitar la reapertura de sus propios temas, pero únicamente dentro de los 60 días previos a la última actualización.

quimbox Seguir

1
Iota
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Verificado por Binance
Suscripción a IA
Desde
22 Mar 2012
Mensajes
2.340
Hola forobetas, estoy desarrollando un script, el cual tiene como función hacer una búsqueda dependiendo de los datos etc.. Todo bien hasta ahí, pero tengo un problema cuando se hace una búsqueda con un apostrofe ejemplo:

Hola's no me devuelve nada en la búsqueda es como que si no existiera ese texto, y actualmente así se ha guardado en la base de datos

el codigo que uso es el siguiente en la configuracion:

PHP:
if($_GET['busca'] != "") {
$palabra = mysql_real_escape_string(htmlspecialchars($_GET['busca'], ENT_QUOTES, 'UTF-8'));
$pregunta = mysql_query("SELECT * FROM trabajo WHERE titulo LIKE '%$palabra%'");
$spregunta = mysql_fetch_assoc($spregunta);
}

Y en archivo como tal donde se busca, es buscar.php

PHP:
 echo $_GET['busca'] // este muestra la palabra usada cuando se busco

PHP:
if($pregunta) {
$spreguntas = mysql_query("SELECT * FROM trabajo WHERE titulo LIKE '%$palabra%'");
while($ft = mysql_fetch_array($spreguntas)){

Y como dije cuando hago una busqueda que lleva apostrofe no me aparece ningun resultado. Espero me puedan ayudar un saludo.
 

Cicklow

Admin
Épsilon
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Suscripción a IA
Desde
30 May 2011
Mensajes
970
Hola forobetas, estoy desarrollando un script, el cual tiene como función hacer una búsqueda dependiendo de los datos etc.. Todo bien hasta ahí, pero tengo un problema cuando se hace una búsqueda con un apostrofe ejemplo:

Hola's no me devuelve nada en la búsqueda es como que si no existiera ese texto, y actualmente así se ha guardado en la base de datos

el codigo que uso es el siguiente en la configuracion:

PHP:
if($_GET['busca'] != "") {
$palabra = mysql_real_escape_string(htmlspecialchars($_GET['busca'], ENT_QUOTES, 'UTF-8'));
$pregunta = mysql_query("SELECT * FROM trabajo WHERE titulo LIKE '%$palabra%'");
$spregunta = mysql_fetch_assoc($spregunta);
}

Y en archivo como tal donde se busca, es buscar.php

PHP:
 echo $_GET['busca'] // este muestra la palabra usada cuando se busco

PHP:
if($pregunta) {
$spreguntas = mysql_query("SELECT * FROM trabajo WHERE titulo LIKE '%$palabra%'");
while($ft = mysql_fetch_array($spreguntas)){

Y como dije cuando hago una busqueda que lleva apostrofe no me aparece ningun resultado. Espero me puedan ayudar un saludo.

en realidad vos usas
PHP:
$palabra = mysql_real_escape_string(htmlspecialchars($_GET['busca'], ENT_QUOTES, 'UTF-8'));
para ver como realmente queda tenes que usar:
PHP:
echo $palabra;
asi sabes como tenes que guardar las cosas en la BD
 

quimbox

1
Iota
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Verificado por Binance
Suscripción a IA
Desde
22 Mar 2012
Mensajes
2.340
[MENTION=9679]cicklow[/MENTION] no entendi muy bien.

Elimine esto
PHP:
mysql_real_escape_string(htmlspecialchars($_GET['busca'], ENT_QUOTES, 'UTF-8'));

y deje solamente esto

PHP:
$palabra;
sin el echo porque esto esta dentro del archivo de configuración el cual llamo con un include en el archivo buscar.php

y al buscar me da como resultado todo lo que esta guardado.
 

Cicklow

Admin
Épsilon
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Suscripción a IA
Desde
30 May 2011
Mensajes
970
[MENTION=9679]cicklow[/MENTION] no entendi muy bien.

Elimine esto
PHP:
mysql_real_escape_string(htmlspecialchars($_GET['busca'], ENT_QUOTES, 'UTF-8'));

y deje solamente esto

PHP:
$palabra;
sin el echo porque esto esta dentro del archivo de configuración el cual llamo con un include en el archivo buscar.php

y al buscar me da como resultado todo lo que esta guardado.

a lo que me refieria es que por ejemplo eso que tenes vos ahi convierte esto:
hóla en hóla y si vos no tenes eso en la base de datos, pues jamas vas a encontrar la palabra hola con acento (es un ejemplo)
 

quimbox

1
Iota
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Verificado por Binance
Suscripción a IA
Desde
22 Mar 2012
Mensajes
2.340
[MENTION=9679]cicklow[/MENTION] ok ahora si entendí, pero si quito htmlspecialchars, ENT_QUOTES, y UTF-8 es vulnerable a xss.

probe con <h1>xss</h1> y en el texto donde sale la palabra que se uso para buscar se coloca con un h1 salen grandes las letras.

Por eso fue que yo le añadi el htmlspecialchars, ent_quotes y utf8.
 

Cicklow

Admin
Épsilon
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Suscripción a IA
Desde
30 May 2011
Mensajes
970
[MENTION=9679]cicklow[/MENTION] ok ahora si entendí, pero si quito htmlspecialchars, ENT_QUOTES, y UTF-8 es vulnerable a xss.

probe con <h1>xss</h1> y en el texto donde sale la palabra que se uso para buscar se coloca con un h1 salen grandes las letras.

Por eso fue que yo le añadi el htmlspecialchars, ent_quotes y utf8.

el XSS no se hace en una consulta... se hace al mostrar el resultado... vos tenes ke aplicar el filtro de htmletities en el echo... sino queres XSS en la consulta (ke no ocurre) usa strip_tags
 

quimbox

1
Iota
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Verificado por Binance
Suscripción a IA
Desde
22 Mar 2012
Mensajes
2.340
el XSS no se hace en una consulta... se hace al mostrar el resultado... vos tenes ke aplicar el filtro de htmletities en el echo... sino queres XSS en la consulta (ke no ocurre) usa strip_tags

Ok, yo lo agregue.

PHP:
echo htmletities(strip_tags($_GET['busca']));

y la prueba xss que hice anterior no la ejecuta, osea se eliminan los tags, pero probé con este

Insertar CODE, HTML o PHP:
'">><marquee><h1>XSS</h1></marquee>
y en el texto de la búsqueda se mueve con el marquee.

Y me disculpa que si le estoy quitando tiempo hermano.
 

Cicklow

Admin
Épsilon
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Suscripción a IA
Desde
30 May 2011
Mensajes
970
Ok, yo lo agregue.

PHP:
echo htmletities(strip_tags($_GET['busca']));

y la prueba xss que hice anterior no la ejecuta, osea se eliminan los tags, pero probé con este

Insertar CODE, HTML o PHP:
'">><marquee><h1>XSS</h1></marquee>
y en el texto de la búsqueda se mueve con el marquee.

Y me disculpa que si le estoy quitando tiempo hermano.

PHP:
echo htmlentities(strip_tags($_GET['busca']));
es htmlentities...
 

quimbox

1
Iota
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Verificado por Binance
Suscripción a IA
Desde
22 Mar 2012
Mensajes
2.340
PHP:
echo htmlentities(strip_tags($_GET['busca']));
es htmlentities...

Sigo obteniendo el marquee :fatigue:

---------- Post agregado el 03-dic-2013 hora: 16:21 ----------


[MENTION=9679]cicklow[/MENTION] ya lo solucione, no recordaba que tenia también el código $_GET['busca'] en la cabecera.

Gracias por tu ayuda. Un saludo. :encouragement:
 
Última edición:
Estado

🔒 Este tema está cerrado para nuevas respuestas.

⏰ Solo el creador del tema puede solicitar la reapertura de sus propios temas, pero únicamente dentro de los 60 días previos a la última actualización.

Arriba