Question

J'ai découvert qu'à chaque fois que je fais les choses suivantes:

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

Les éléments suivants sont restitués au navigateur:

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

Ceci est particulièrement gênant lorsque je crée un lien vers un fichier avec une extension, car cela rompt le lien.

Avez-vous des idées sur la raison pour laquelle cela se produit et comment je peux y remédier?

Mise à jour: Pour ceux qui me demandent quelle est ma mise en œuvre exacte, la voici. Dans ma résolution des problèmes, je l'ai utilisé autant que je le pouvais, alors s'il vous plaît, ne faites pas attention à l'endroit où je concatte du texte brut en texte clair ...

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

Mise à jour: En réponse à Matt Long, j'ai collé dans votre ligne et il a rendu le même.

Mise à jour: En réponse à Fire Lancer, j’ai réintégré ma tentative initiale et je vous montrerai les deux ci-dessous.

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>

La raison de la sous-transformation est due au fait que l'URL est exécutée via rawurlencode () ailleurs et que la liaison avec http% 3A% 2F% 2F fait en sorte que la page pense qu'il s'agit d'un lien local / relatif.

Mise à jour: J'ai collé la réponse ci-dessus sans vraiment la regarder. Le code HTML est donc correct lors de la visualisation de la source, mais la page elle-même l’interprète avec une autre barre oblique après.

Solution: Tout était dû à rawlurlencode (). Si je décodais ou sautais l'encodage, tout fonctionnait parfaitement. En raison de quelque chose sur rawurlencode (), le navigateur souhaite y insérer une barre oblique.

Était-ce utile?

La solution

Firefox, en particulier, vous montre la source HTML de la façon dont elle est perçue, ce qui est rarement le mode que vous avez envoyé. Il est clair que quelque chose à propos de votre lien ou de son contexte force le navigateur à interpréter une barre oblique finale.

Je me demande si c'est un effet secondaire de l'encodage de l'URL. Si vous avez un code brut, cela vous aidera. S'il y a des parties de l'URL qui doivent rester codées, vous pouvez rechercher les barres obliques et les remettre en place.

Autres conseils

Je n'ai jamais eu ça, à quel point reprenez-vous le lien avec exactitude? Tout ce qui suit devrait fonctionner.

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

modifier, puisque vous avez ajouté l'info.

Vous ne pouvez pas simplement avoir http: // en tant que href, même si vous entrez ce lien directement dans une page HTML a cet effet. par exemple:
html:

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

lien (en FF3):

http:///

L'erreur doit être ailleurs. echo écrit la chaîne, mot pour mot. Aucun post-traitement n'est effectué sur aucune partie. La barre oblique supplémentaire est donc ajoutée ailleurs dans votre code (avant de passer la chaîne à echo ).

Obtenez-vous le même résultat si vous utilisez des guillemets doubles et échappez ainsi à des guillemets internes?

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

Si je mets cette commande echo dans mon code PHP, il génère "http: //". comme prévu (vous pouvez voir cela dans le source de la sortie générée), mais lorsque je passe ensuite la souris sur le lien dans la page résultante (avec IE7), il indique http: /// .

Je suppose que c'est le comportement du navigateur, car il ne peut y avoir de lien http: // sans nom d'hôte ni adresse IP (vous ne pouvez pas simplement accéder au protocole).

Comme certains l'ont souligné, "http: //" n'est pas un lien valide. Votre navigateur ajoute donc une barre oblique supplémentaire à la fin. Pour le visualiser, essayez un lynx -dump http: //votre domaine/votrefichier.php (si vous êtes chanceux assez pour avoir un linux) ou telnet de votre boîte à votre serveur sur le port 80, et en tapant ceci:

GET /path/file.php HTTP/1.0

et regardez le résultat.

Avez-vous examiné vos paramètres de configuration PHP? C'est peut-être magic_quotes_gpc qui décide de vous échapper (j'ai été mordu plusieurs fois par ce réglage, notamment lorsque je travaillais avec du trafic AJAX / JSON). Essayez de vous assurer qu'il est éteint et qu'il répète (vous devrez peut-être modifier votre fichier php.ini ou ajouter php_flag magic_quotes_gpc off à un fichier .htaccess dans le répertoire dans lequel vous travaillez, selon votre environnement. ).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top