Domanda

L'ho scoperto ogni volta che faccio quanto segue:

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

Ho finito con il rendering al browser di quanto segue:

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

Ciò è particolarmente fastidioso quando mi collego a un file con estensione, in quanto interrompe il collegamento.

Qualche idea sul perché questo accada e su come posso risolverlo?

Aggiornamento: Per coloro che chiedono la mia esatta implementazione, eccolo qui. Nella mia risoluzione dei problemi l'ho attenuato il più possibile, quindi per favore non importa dove concaturo il testo normale in testo normale ...

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>';
}

Aggiornamento: In risposta a Matt Long, ho incollato la tua linea e ha reso lo stesso.

Aggiornamento: In risposta a Fire Lancer, ho ripreso il mio tentativo originale e ti mostrerò entrambi di seguito.

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>

Il motivo della sottostringa è dovuto al fatto che l'URL viene eseguito tramite rawurlencode () altrove e il collegamento a http% 3A% 2F% 2F fa pensare che la pagina sia un collegamento locale / relativo.

Aggiornamento: Ho incollato la risposta sopra senza davvero guardarla. Quindi l'HTML è corretto quando si visualizza l'origine, ma la pagina effettiva lo interpreta con un'altra barra finale dopo di essa.

Soluzione: Tutto questo è stato il risultato di rawlurlencode (). Se decodificavo o ignorassi la codifica tutti insieme, tutto funzionava perfettamente. Qualcosa su rawurlencode () fa venire voglia al browser di attaccare una barra.

È stato utile?

Soluzione

Firefox, in particolare, ti mostra l'origine html nel modo in cui lo vede, che raramente è il modo in cui lo hai inviato. Chiaramente qualcosa sul tuo link o sul suo contesto sta facendo interpretare il browser in una barra finale.

Mi chiedo se sia un effetto collaterale della codifica dell'URL. Se crudi il vecchio codice sarà di aiuto. Se ci sono parti dell'URL che devono rimanere codificate, puoi cercare le barre e rimetterle.

Altri suggerimenti

Non l'ho mai avuto, quanto ecologicamente stai facendo eco al link? Tutto quanto segue dovrebbe funzionare.

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

modifica, poiché hai aggiunto le informazioni.

Non puoi semplicemente avere http: // come href, anche inserire quel link direttamente in una pagina html ha questo effetto. ad esempio:
html:

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

link (in FF3):

http:///

L'errore deve essere altrove. echo scrive la stringa, alla lettera. Nessuna post-elaborazione viene eseguita su nessuna parte. La barra aggiuntiva viene quindi aggiunta altrove nel codice (prima di passare la stringa a echo ).

Ottenete lo stesso risultato se usate virgolette doppie e uscite da virgolette doppie interne come questa?

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

Se inserisco quel comando echo nel mio codice PHP, genera " http: // " come previsto (puoi vederlo nella fonte dell'output generato), ma quando passo con il mouse sopra il link nella pagina risultante (con IE7), mostra http:. ///

La mia ipotesi è che si tratti di un comportamento del browser, perché non può esserci un collegamento http: // senza un nome host o un indirizzo IP (non puoi semplicemente accedere al protocollo).

Come alcuni ragazzi hanno sottolineato, 'http: //' non è un link valido, quindi il tuo browser aggiunge la barra in più alla fine. Per vederlo, prova una lince -dump http: //yourdomain/yourfile.php (se sei fortunato abbastanza per avere un linux) o telnet dalla tua casella al tuo server nella porta 80, e digitando questo:

GET /path/file.php HTTP/1.0

e guarda il risultato.

Hai esaminato le tue impostazioni di configurazione di PHP? Potrebbe essere magic_quotes_gpc che decide di sfuggire alle cose per te (sono stato morso più volte da quell'impostazione, specialmente quando lavoro con il traffico AJAX / JSON). Prova ad assicurarti che sia spento e riecheggi (potresti dover modificare il tuo file php.ini o aggiungere php_flag magic_quotes_gpc off a un file .htaccess nella directory in cui stai lavorando, a seconda del tuo ambiente ).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top