Ir para conteúdo

POWERED BY:

Arquivado

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

m_luism

Problema Links website PHP ///"//"/"

Recommended Posts

Tinha um website 100% funcional. Tive trocar servidor...
Ao trocar para outro servidor/alojamento surgiu o seguinte problema:


Sempre que no backoffice do site em php, gravo algum texto com um link. (por exemplo link para wikipedia)
Posteriormente na interface ao clicar no texto/link em vez de abrir uma nova pagina
abre o link no seguinte formato:

meusite.com//"//"////"http://wikipedia.org/"////"//"/"


alguma solucao para isto?
sera que tem alguma coisa a haver com configuração novo servidor?
Algum problema de base dados?
ou mascaras?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sou eu :)
Eu desenvolvi o site em php, mas nao encontro o defeito!

 

Num servidor funciona bem, no outro passou a mostrar os links dessa forma

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu sei que ninguem tem bola cristal.... e que ninguem adivinha

eu posso postar o codigo e explicar. Se nao postei ate agora foi porque pensei que fosse um erro comum!

Ou seja pensei que fosse normal criar essas mascaras nos links "////" e que alguem conhecesse a solucao.

 

Primeiro porque o site tem o backoffice que tem caixas texto (tipo as que se esta a usar no forum, e onde eu guardo e faz o registo na base dados.

 

 

No frontoffice/interface tenho o seguinte para mostrar:

 

 

// ISTO É UMA PAGINA COM COLUNAS LADO DIREITO, E CONTEUDO LADO ESQUERDO
// AO CLICAR NA COLUNA ESQUERDA APARECE DO LADO DIREITO O CONTEUDO

<?
$res = mysql_query("SELECT * FROM Pages WHERE subpage='links");
$paginasquemsomos = array();
while($row = mysql_fetch_array($res)){
	$paginasquemsomos[] = $row['PageName'];
}
$sub = $_GET['sub'];
$flagquemsomos = false;
if(isset($sub)){
	if(!in_array($sub, $paginasquemsomos)){
		$flagquemsomos = true;
	}
}
$res = mysql_query("SELECT * FROM Pages WHERE subpage='links'");
while($row = mysql_fetch_array($res)){	
  if(!$flagquemsomos){
?>
  <li><a href="?page=links⊂=<?=$row['PageName'] ?>" class="activo" ><?=$row['Title'.$lang['lang']] ?></a></li><?
  $flagquemsomos = true;
  $sub = $row['PageName'];
  $subText = $row['Text'.$lang['lang']];
  }else{
  ?>
     <li><a href="?page=links⊂=<?=$row['PageName'] ?>" <?= ($sub == $row['PageName']) ? 'class="activo"' : '' ?> ><?=$row['Title'.$lang['lang']] ?></a></li><?
     if($sub == $row['PageName'])
     $subText = $row['Text'.$lang['lang']];
   }
  }
?>


O codigo da interface esta correcto, eu pelo menos tenho quase certeza disso!

mas o backoffice esta a guardar da seguinte forma na base dados os links

<p><a href=\"\\"\\\\"sapo.pt\\\\"\\"\" target=\"\\"\\\\"_blank\\\\"\\"\">sapo.pt</a></p>
<p> </p>
<p><a href=\"\\"sapo.pt\\"\">sapo.pt</a></p>
<p> </p>
<p><a title=\"\\"www.sapo.pt\\"\" href=\"\\"http:/www.sapo.pt\\"\" target=\"\\"_top\\"\">sapo.pt</a></p>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Através de backoffice, usando ferramentas com caixas de texto através do JS tiny_mce

que é o que uso nos backoffice que crio.... (tem boa interface para os administradores dos websites)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique o retorno deste código (precisa ser executado no servidor no qual o site está rodando e dando este problema).

 

<?php

var_dump(get_magic_quotes_gpc());

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bru_ce, bem lembrado!

 

O problema é que você está com o magic_quotes habilitado, você possui acesso ao PHP.ini? é que você precisa desabilitá-lo, pois ele está causando o problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Imprimiu isto:

 

int(1)

 

Isso significa que a diretiva magic_quotes_gpc está habilitada no seu servidor, no PHP.INI. Essa... porcaria teimosa insiste em escapar alguns caracteres considerados especiais automaticamente.

 

O problema maior é que um dos caracteres que ela escapa é o próprio caractere usado para escapar, ou seja, ao encontrar uma barra invertida ( \ ) ela vai adicionar outro ( \\ ), só que esse, adicionado à esquerda, precisa ser escapado ( \\\ ) e como também é um caractere de controle, escapado novamente ( \\\\ ).

 

Para os outros caracteres, a substituição pára em três barras invertidas.

 

 

SEMPRE COLOQUE ASSIM SEU PHP

 

<?php

 

E NÃO ASSIM:

 

<?

 

Apesar de pertinente, isso não influencia no problema.

 

O problema é que você está com o magic_quotes habilitado, você possui acesso ao PHP.ini? é que você precisa desabilitá-lo, pois ele está causando o problema.

 

E se não tiver acesso ao PHP.INI essa diretiva pode ser configurada também via .htaccess.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boas,

obrigado pela ajuda!

 

Tentei procurar o php.ini e nao encontrei...

tentei o usar o phpinfo() mas esta desactiva

 

Encontrei o ficheiro .htaccess

mas se tento editar, o site nao funciona.

 

Sabem dizer-me se é possivel editar o ficheiro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

depende do que vc enfiou no htaccess para conseguir travar o apache..

 

afinal, o que vc fez?

 

php_flag magic_quotes_gpc off

ou
php_value magic_quotes_gpc off
ou
php_admin magic_quotes_gpc off

 

depende de como está as permissões e setagens do ambiente

 

olhe no log o motivo do erro..

 

se nada funcionar terá que aplicar aquela beleza de gambiarra usando array_map



Note que isso apenas desativará o magic_quotes, mas o seu problema mesmo acredito que persistirá para os dados que já estão salvos com as barras invertidas...

 

ainda terá que corrigir, no banco de dados, removendo os caracteres de escape

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim eu sei que depois tenho de actualizar a base dados.

O ficheiro estava em branco, editei e acrescentei o que mencionou

exemplo:

 

<?

php_admin magic_quotes_gpc off

?>

 

O erro que da é o seguinte:

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.

Compartilhar este post


Link para o post
Compartilhar em outros sites

htacess não tem nada a ver com php..

 

o erro é provavelmente devido as tag...

 

remova as tags coloque apenas essa linha

 

 

php_admin magic_quotes_gpc off

 

se falhar, troque php_admin por php_value ou php_flag

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.