Pergunta

Eu descobri que a qualquer momento eu faça o seguinte:

echo '<a href="http://" title="bla">huzzah</a>';

eu acabar com o seguinte a ser processada para o navegador:

<a href="http:///" title="bla">huzzah</a>

Este é particularmente irritante quando eu vincular a um arquivo com uma extensão, como se quebra o vínculo.

Todas as ideias por que isso está acontecendo e como posso corrigir isso?

Update: Para aqueles perguntando sobre minha implementação exata, aqui está. Na minha resolução de problemas que eu emburreci tanto quanto eu podia, por isso, não importa onde eu concat texto simples para texto simples ...

function print_it($item) {
    echo '<div class="listItem clearfix">';
    echo '<div class="info">';
    echo '<span class="title">';
    if(isset($item[6])) {
        echo '<a href="http://" title="">' . 'me' . '</a>';
    }
    echo '</span>';
echo '</div></div>';
}

Update: Em resposta a Matt Long, eu colado em sua linha e prestado o mesmo.

Update: Em resposta ao fogo Lancer, eu coloquei de volta na minha tentativa original, e irá mostrar-lhe ambos abaixo.

echo substr($item[6],13) . '<br>';
echo '<a href="http://' . substr($item[6],13) . '" title="' . $item[0] . '">' . $item[0] . '</a>';

<span class="title">www.edu.gov.on.ca%2Feng%2Ftcu%2Fetlanding.html<br>
<a href="http://www.edu.gov.on.ca%2Feng%2Ftcu%2Fetlanding.html" title="Employment Ontario">Employment Ontario</a></span>

A razão para a substr'ing é devido à URL que está sendo executado através de rawurlencode () em outro lugar, e ligando para http% 3A% 2F% 2F torna a página acho que é uma ligação local / parente.

Update: Colei a resposta acima sem realmente olhando para ele. Assim, o HTML é correcta de visualização de origem, mas o real página interpreta-la com outra barra no final depois.

Solução: Isso tudo foi resultado de rawlurlencode (). Se eu decodificado, ou ignorado a codificação de todos juntos, tudo funcionou perfeitamente. Algo sobre rawurlencode () faz com que a falta navegador para furar uma barra lá dentro.

Foi útil?

Solução

O Firefox, especialmente, mostra-lhe a fonte html do jeito que está vendo o que raramente é o caminho que você enviou. Claramente algo sobre o seu link ou do contexto está fazendo o navegador interpretar uma barra final.

Eu me pergunto se é um efeito colateral da codificação url. Se você rawurldecode ele será essa ajuda. Se houver partes do URL que precisa ficar codificados você poderia procurar as barras e basta colocar isso de volta.

Outras dicas

Ive nunca teve isso, como ecactly está ecoando o link? Tudo o seguinte deve funcionar.

echo '<a href="http://someothersite.com">Link</a>';
echo '<a href="anotherpage.php">Some page</a>';
echo '<a href="../pageinparentdir.php">Another page</a>';
etc

editar, desde que adicionou a informação.

Você não pode apenas ter http: // como href, mesmo entrando em que apontam diretamente para uma página html tem esse efeito. por exemplo:
html:

 <a href="http://" title="bla">huzzah</a>

link (em FF3):

http:///

O erro deve ser em outro lugar. echo escreve a string, literalmente. No pós-processamento é feito em qualquer parte. A barra adicional é, portanto, acrescentou em outro lugar no seu código (antes de passar a corda para echo).

Você obter o mesmo resultado se você usar aspas duplas e escapar aspas internas como este?

echo "<a href=\"http://\" title=\"bla\">huzzah</a>";

Se eu colocar esse comando echo no meu código PHP, ele gera "http: //" como esperado (você pode ver que na origem da saída gerada), mas quando eu então mouse sobre o link na página resultante (com IE7), mostra http: ///.

Meu palpite é que isso é o comportamento do navegador, porque não pode haver uma http: // link sem um nome de host ou endereço IP (você não pode simplesmente acessar o protocolo)

.

Como alguns caras apontou, 'http: //' não é um link válido, para que o seu navegador adiciona a barra extra no final. Para vista, tente um lince -dump http: //yourdomain/yourfile.php (se você tiver sorte o suficiente para ter um linux) ou telnet do seu caixa para o servidor na porta 80 e digitando o seguinte:

GET /path/file.php HTTP/1.0

e olhar para o resultado.

Você olhou para as suas definições de configuração do PHP? Pode ser magic_quotes_gpc decidir escapar coisas para você (eu fui mordido várias vezes por essa definição, especialmente quando se trabalha com o tráfego AJAX / JSON). Tente ter certeza que ele está desligado e ecoando novamente (talvez você precise editar o seu arquivo php.ini, ou adicionar php_flag magic_quotes_gpc off para um arquivo .htaccess no diretório que você está trabalhando, dependendo do ambiente).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top