Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Imshy

Problema com \ (barra invertida)

Recommended Posts

Opa, tranquilo?

 

Pessoal, to com um problema quando vou salvar dados em uma tabela no banco... Quando eu voto algum desses caracteres: "(aspas dupla), '(aspas simples), \(barra), ele tah botando uma outra barra antes... Como se fosse uma proteção..

 

Eu to usando o Zend Framework, Jquery.

 

Tipo, botei pra dah um alert na aplicação quando ainda estava no js, e ele deu normal, mas quando chega no php, ele coloca a barra... Por padrão, o php bota essa barra invertida, mas por padrão ele também tira... E não está acontecendo Oo

 

Queria saber se alguém já teve problema parecido..

 

Obs: Acho que não é o caso de usar o sripslashes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A barra invertida é um caractere de escape. Em outras palavras, se você tem uma barra invertida seguida de um caractere, isso pode ser, algumas vezes, traduzido em um novo caractere. As únicas coisas que uma barra invertida escapa, porém, são o apóstrofo e a própria barra invertida (Se você pensar a respeito, caracteres de escape devem sempre escapar a si mesmos).) Acho que uns exemplos são bons agora:

 

puts 'Isso é um apóstrofo: \''
puts 'uma barra invertida no fim da string:  \\'
puts 'acima\\embaixo'
puts 'acima\embaixo'

Isso é um apóstrofo: '
uma barra invertida no fim da string:  \
acima\embaixo
acima\embaixo

Fonte: http://aprendaaprogramar.rubyonrails.pro.br/capitulo02

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agradeço a ajuda, mas acho que não expliquei o problema direito =]

 

Testei normalmente, usando action, sem ajuda de nenhum javascript.

Testei usando Jquery ( jQuery.ajax );

Testei usando Prototype( Ajax.Request );

 

Todos, ainda no javascript estavam certo, mas quando o php recebe, ele vem com uma maldita barra invertida...

 

Tem algum modo de eu fazer isso sem stripslashes, ou não existe?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teria como postar trechos do script?

Como você disse, parece proteção, você não está aplicando uma? ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simplesmente pq se não tiver a barra o PHP ou o MySQL podem não conseguir interpretar corretamente o caractere e gravar a informação incorreta.

 

http://br2.php.net/manual/pt_BR/language.types.string.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teria como postar trechos do script?

Como você disse, parece proteção, você não está aplicando uma? ;)

Tem sim, é um código simples que demonstra exatamente o meu problema, você pode testar aí mesmo:

 

<form action="recebeDados.php" method="post">

	Teste:<br />
	<textarea name="teste" id="teste" rows="10" cols="30">D'agua</textarea>

	<input type="submit" />

</form>

e no arquivo recebeDados.php só faça isso:

 

echo '<pre>';
print_r( $_POST );
echo '</pre>';

Você vai ver que ele vai receber o D'agua dessa forma: "D\'agua".

 

O que eu quero fazer é simplesmente que ele tire isso...

 

Só que no meu caso, é num sistema grande, em TODO ele.. então preciso de algo genérico.. Andei lendo sobre isso e muitos falaram sobre array_walk_recursive.. O que acham?

 

Edit: Depois de pesquisar um poquim, achei uma solução amigável =]

 

Na hora de você salvar, dê um array_walk_recursive( $_POST, 'tiraBarraInvertida' ), os parâmetros são ( seuarray, nomedafuncao )

 

e na funcao voce bota

 

function tiraBarraInvertida( &$array ){ //o "&" é pra modificar diretamente no POST
	stripslashes( $array );
}

Pronto, o seu post tah direitinho agora =DD

 

Agradeço a ajuda de todos, e espero que sirva de referência para outros ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.