Problemas com preg_replace que come os charecter \\ (barra invertida) deixando apenas 1 \ (barra invertida)

877 views
Skip to first unread message

Alexsandro_xpt

unread,
Jul 22, 2008, 12:01:57 PM7/22/08
to LISTA PHP
Boa tarde a todos,

Vocês ja passaram por isto?
Testem isto
echo preg_replace('/.*/is','dia\\legal','aaa');

ele remove a barra deixando apenas 1, como resolver isto?

podem até repetir a barra que nao funciona...

Eu uso isto em javascript onde se tem estas barras invertidas e
estraga todo o JS.



Alguem pode ajudar?


Obrigado..

SrSilveira

unread,
Jul 22, 2008, 2:27:53 PM7/22/08
to LISTA PHP
'tendi não...

Alexsandro_xpt

unread,
Jul 22, 2008, 2:49:15 PM7/22/08
to LISTA PHP
Execute isto e veras oque acontece.

echo preg_replace('/.*/is','dia \\\ legal','aaa');

vc vai se perguntar pra onde foram mas barras.


Elas nao podem sumir!!

Ricardo Silveira

unread,
Jul 22, 2008, 2:51:30 PM7/22/08
to list...@googlegroups.com
ok, mas, o que vc quer fazer?

2008/7/22 Alexsandro_xpt <bagu...@gmail.com>:



--
Ricardo L. Silveira
http://srsilveira.com/blog

George Gilson

unread,
Jul 22, 2008, 2:51:45 PM7/22/08
to list...@googlegroups.com
tu queres remover \\ de uma string?!

usa a função str_replace("\\","//",$varString)



2008/7/22 SrSilveira <srsil...@gmail.com>:



--
George Gilson

Alexsandro_xpt

unread,
Jul 22, 2008, 3:03:10 PM7/22/08
to LISTA PHP
Não, eu quero é manter eles...

é que faço isto com javascript, dai ele come todo meu codigo
javascript que é repleto de barras invertidas e meu javascript fica
danificado e isto não pode acontecer.
Entenderam?


Obrigado pela atençao...



On 22 jul, 15:51, "George Gilson" <georgegil...@gmail.com> wrote:
> tu queres remover \\ de uma string?!
>
> usa a função str_replace("\\","//",$varString)
>
> 2008/7/22 SrSilveira <srsilve...@gmail.com>:

Alexsandro_xpt

unread,
Jul 22, 2008, 3:07:18 PM7/22/08
to LISTA PHP
Ricado, eu quero que o preg_replace pare de ingulir minhas barras
invertidas.

Isto que eu postei ai é o exemplo, vc ta querendo saber o que eu quero
fazer ne?
É uma longa historia, eu tive que simplificar pra vcs entendere melhor
com eleste exemplo bobo ai que mostra muito bem o problema.

Consegue me ajudar?

Valew..


On 22 jul, 15:51, "Ricardo Silveira" <srsilve...@gmail.com> wrote:
> ok, mas, o que vc quer fazer?
>
> 2008/7/22 Alexsandro_xpt <bagul...@gmail.com>:

George Gilson

unread,
Jul 22, 2008, 3:50:56 PM7/22/08
to list...@googlegroups.com
cara.. num sei..

o problema eh q o caracter \ significa escape nessa funções..

tenta assim..

$s = 'dia'."\\legal";
$s = str_replace("\\","%%%",$s);
$p = preg_replace('/.*/',$s,'aaa');
echo $s = str_replace("%%%","\\\\",$p);


2008/7/22 Alexsandro_xpt <bagu...@gmail.com>:



--
George Gilson

Gigihto

unread,
Jul 22, 2008, 4:20:19 PM7/22/08
to LISTA PHP
<?
$teste = preg_replace('/.*/is', 'dia\\legal', 'aaa');
print addslashes($teste);
?>

assim nao rola?

On 22 jul, 16:50, "George Gilson" <georgegil...@gmail.com> wrote:
> cara.. num sei..
>
> o problema eh q o caracter \ significa escape nessa funções..
>
> tenta assim..
>
> $s = 'dia'."\\legal";
> $s = str_replace("\\","%%%",$s);
> $p = preg_replace('/.*/',$s,'aaa');
> echo $s = str_replace("%%%","\\\\",$p);
>
> 2008/7/22 Alexsandro_xpt <bagul...@gmail.com>:

Alexsandro_xpt

unread,
Jul 22, 2008, 4:46:45 PM7/22/08
to LISTA PHP
Parece que do seu jeito vai dar... foda é que tem 3 funçoes na
jogada...


mas vc nao sabe pq este problema não?
Sei que o \ escapa outras strings mas isto quando usamos aspas duplas
nao é verdade?
Nas aspas simples isto nao acontece...


Foda que eu mando um gigantesco bloco de JS.

----
Gigihto

Assim nao rola pq addslashes pega as minhas strings JS ficando assim:
var tteste = \'qualquer coisa\';

e isto da erro de script morou?





On 22 jul, 16:50, "George Gilson" <georgegil...@gmail.com> wrote:
> cara.. num sei..
>
> o problema eh q o caracter \ significa escape nessa funções..
>
> tenta assim..
>
> $s = 'dia'."\\legal";
> $s = str_replace("\\","%%%",$s);
> $p = preg_replace('/.*/',$s,'aaa');
> echo $s = str_replace("%%%","\\\\",$p);
>
> 2008/7/22 Alexsandro_xpt <bagul...@gmail.com>:

Alessandro RS

unread,
Jul 23, 2008, 7:49:51 AM7/23/08
to list...@googlegroups.com
Em JavaScript o "\" escapa caracteres tanto dentro de aspas simples como duplas.

E se vc estiver usando expressões regulares tanto em PHP como em
JavaScript, vai escapar do mesmo jeito.

(Me corrijam se estiver errado)

2008/7/22 Alexsandro_xpt <bagu...@gmail.com>:


> mas vc nao sabe pq este problema não?
> Sei que o \ escapa outras strings mas isto quando usamos aspas duplas
> nao é verdade?
> Nas aspas simples isto nao acontece...

--
[]'s & =*'s do lee
# Alessandro Ramos dos Santos @ Itaporanga @ SP @ Brasil
# MSN: lee.rain # Gtalk: edenfall # Orkut: 7093009035179968825

"A nação que resolve trocar um pouco de liberdade por um pouco de
ordem não consegue nenhuma das duas, e não merece a ambas" - Thomas
Jefferson

Alexsandro_xpt

unread,
Jul 23, 2008, 9:04:15 PM7/23/08
to LISTA PHP
Entendo....

Mas pode ter certeza que não tem haver com o JS pois o source da
pagina ja chega com o JS danificado e não execução
Veja abaixo como é o esperado e como está chegando no source do
browser:

Original:

String.prototype.convertToUrl = function() {
var reChars = /(&|À|Á|Â|Ã|Ä|Å|È|É|Ê|Ë|Ì|Í|Î|Ï|Ò|Ó|Ô|Õ|Ö|Ù|Ú|Û|Ü|
Ç|Ñ|Ý|à|á|â|ã|ä|å|è|é|ê|ë|ì|í|î|ï|ò|ó|ô|õ|ö|ù|ú|û|ü|ç|ñ|ý|ÿ| )/g;
var sRepl = "/(e|A|A|A|A|A|A|E|E|E|E|I|I|I|I|O|O|O|O|O|U|U|U|U|
C|N|Y|a|a|a|a|a|a|e|e|e|e|i|i|i|i|o|o|o|o|o|u|u|u|u|c|n|y|y|-)/g";

var sChars = reChars.toString();
string = this.trim().replace( reChars, function(e){
return sRepl.charAt(sChars.indexOf(e,0));
});
string = string.replace(/\//g,'-').replace(/([-]{2}|"|,|^|~|\.|;|:|
\?|'|%|#|@|!|\(|\)|\+|=|\{|\}|\\|<|>)/g,'');
return string.toLowerCase();
};


Danificado:
String.prototype.convertToUrl = function() {
var reChars = /(&|À|Á|Â|Ã|Ä|Å|È|É|Ê|Ë|Ì|Í|Î|Ï|Ò|Ó|Ô|Õ|Ö|Ù|Ú|Û|Ü|
Ç|Ñ|Ý|à|á|â|ã|ä|å|è|é|ê|ë|ì|í|î|ï|ò|ó|ô|õ|ö|ù|ú|û|ü|ç|ñ|ý|ÿ| )/g;
var sRepl = "/(e|A|A|A|A|A|A|E|E|E|E|I|I|I|I|O|O|O|O|O|U|U|U|U|
C|N|Y|a|a|a|a|a|a|e|e|e|e|i|i|i|i|o|o|o|o|o|u|u|u|u|c|n|y|y|-)/g";

var sChars = reChars.toString();
string = this.trim().replace( reChars, function(e){
return sRepl.charAt(sChars.indexOf(e,0));
});
string = string.replace(/\//g,'-').replace(/([-]{2}|"|,|^|~|\.|;|:|
\?|'|%|#|@|!|\(|\)|\+|=|\{|\}|\|<|>)/g,'');
return string.toLowerCase();
};





Pare isto:

string = string.replace(/\//g,'-').replace(/([-]{2}|"|,|^|~|\.|;|:|
\?|'|%|#|@|!|\(|\)|\+|=|\{|\}|\\|<|>)/g,'');
pelo danificado:
string = string.replace(/\//g,'-').replace(/([-]{2}|"|,|^|~|\.|;|:|
\?|'|%|#|@|!|\(|\)|\+|=|\{|\}|\|<|>)/g,'');


Vc notará isto |\| de errado.


Alguma outra ideia?



Falow...


On 23 jul, 08:49, "Alessandro RS" <edenf...@gmail.com> wrote:
> Em JavaScript o "\" escapa caracteres tanto dentro de aspas simples como duplas.
>
> E se vc estiver usando expressões regulares tanto em PHP como em
> JavaScript, vai escapar do mesmo jeito.
>
> (Me corrijam se estiver errado)
>
> 2008/7/22 Alexsandro_xpt <bagul...@gmail.com>:

Alexsandro_xpt

unread,
Jul 23, 2008, 9:07:31 PM7/23/08
to LISTA PHP
Resolvi postar aqui http://pastie.org/239787 porque ta impossivel ler
o codigo por aqui.


Falow..

Alessandro Ramos

unread,
Jul 24, 2008, 7:50:29 AM7/24/08
to list...@googlegroups.com
Você quer que o PHP envie "\\" para o JS certo?

Coloque quatro barras: \\\\

Assim cada par de barras vai escapar uma, ficando do jeito que vc quer: \\

Alexsandro_xpt

unread,
Jul 24, 2008, 5:35:59 PM7/24/08
to LISTA PHP
É isto realmente resolve... mas... isto obstrui meu JS.

Isto não pode acontecer. entende?


Tem mais alguma outra solução?
Não existe uma função que estaure as \\ escapadas não?




On 24 jul, 08:50, "Alessandro Ramos" <edenf...@gmail.com> wrote:
> Você quer que o PHP envie "\\" para o JS certo?
>
> Coloque quatro barras: \\\\
>
> Assim cada par de barras vai escapar uma, ficando do jeito que vc quer: \\
>
>
>
> On Wed, Jul 23, 2008 at 10:07 PM, Alexsandro_xpt <bagul...@gmail.com> wrote:
>
> > Resolvi postar aquihttp://pastie.org/239787porque ta impossivel ler

Erick Couto

unread,
Jul 24, 2008, 5:43:15 PM7/24/08
to list...@googlegroups.com
cara, verifique as formas de escape para strings no manual do PHP.
Não existe milagre.. Barras invertidas escapam seu conteúdo posterior, seja ele qual for.
 
O que vc pode fazer e dar uma estudada nas formas de escape (três) que o php permite
para strings. Dá uma vasculhada no manual.
 


 
2008/7/24, Alexsandro_xpt <bagu...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages