Pregunta

He descubierto que cada vez que hago lo siguiente:

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

Termino con lo siguiente en el navegador:

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

Esto es particularmente molesto cuando enlazo a un archivo con una extensión, ya que rompe el enlace.

¿Alguna idea de por qué sucede esto y cómo puedo solucionarlo?

Actualización: Para aquellos que preguntan sobre mi implementación exacta, aquí está. En mi solución de problemas, lo simplifiqué todo lo que pude, así que no importa dónde concatene el texto sin formato con texto sin formato ...

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

Actualización: En respuesta a Matt Long, pegué en su línea y se hizo lo mismo.

Actualización: En respuesta a Fire Lancer, volví a intentarlo en mi intento original y les mostraré a ambos a continuación.

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>

El motivo de la subcadena se debe a que la URL se ejecuta a través de rawurlencode () en otro lugar, y el enlace a http% 3A% 2F% 2F hace que la página piense que es un enlace local / relativo.

Actualización: Pegué la respuesta anterior sin mirarla realmente. Por lo tanto, el HTML es correcto cuando se visualiza la fuente, pero la página real lo interpreta con otra barra inclinada posterior.

Solución: Todo esto fue el resultado de rawlurlencode (). Si decodificaba, o saltaba la codificación, todo funcionaba perfectamente. Algo sobre rawurlencode () hace que el navegador quiera pegar una barra diagonal allí.

¿Fue útil?

Solución

Firefox, especialmente, le muestra la fuente html de la forma en que la ve, que rara vez es la forma en que la envió. Claramente, algo sobre su enlace o su contexto está haciendo que el navegador interprete una barra inclinada final.

Me pregunto si es un efecto secundario de la codificación url. Si codifica en bruto, será de gran ayuda. Si hay partes de la URL que necesitan permanecer codificadas, puede buscar las barras y simplemente volver a colocarlas.

Otros consejos

Nunca he tenido eso, ¿con qué frecuencia estás haciendo eco del enlace? Todo lo siguiente debería 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, ya que agregó la información.

No puede simplemente tener http: // como href, incluso ingresar ese enlace directamente en una página html tiene ese efecto. por ejemplo:
html:

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

enlace (en FF3):

http:///

El error debe estar en otra parte. echo escribe la cadena, textualmente. No se realiza ningún procesamiento posterior en ninguna parte. Por lo tanto, la barra adicional se agrega a otra parte de su código (antes de pasar la cadena a echo ).

¿Obtiene el mismo resultado si usa comillas dobles y escapa de comillas dobles internas como esta?

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

Si pongo ese comando echo en mi código PHP, genera '' http: // '' como se esperaba (puede ver eso en la fuente de la salida generada), pero cuando luego paso el mouse sobre el enlace en la página resultante (con IE7), muestra http: /// .

Supongo que ese es el comportamiento del navegador, porque no puede haber un enlace http: // sin un nombre de host o una dirección IP (no se puede acceder al protocolo).

Como algunos muchachos señalaron, 'http: //' no es un enlace válido, por lo que su navegador agrega la barra extra al final. Para verlo, intente con lynx -dump http: //yourdomain/yourfile.php (si tiene suerte suficiente para tener un linux) o telnet desde su caja a su servidor en el puerto 80, y escribiendo esto:

GET /path/file.php HTTP/1.0

y mira el resultado.

¿Has mirado la configuración de PHP? Podría ser magic_quotes_gpc decidir escapar de las cosas por ti (esa configuración me ha mordido varias veces, especialmente cuando trabajo con tráfico AJAX / JSON). Intente asegurarse de que esté apagado y repita el eco (es posible que deba editar su archivo php.ini o agregar php_flag magic_quotes_gpc off a un archivo .htaccess en el directorio en el que está trabajando, dependiendo de su entorno ).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top