Эхо Ссылка, получить слэш? - PullRequest
1 голос
/ 01 октября 2008

Я обнаружил, что каждый раз, когда я делаю следующее:

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

Я получаю в браузере следующее:

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

Это особенно раздражает, когда я ссылаюсь на файл с расширением, так как он разрывает ссылку.

Есть идеи, почему это происходит и как я могу это исправить?

Обновление: Для тех, кто спрашивает о моей точной реализации, вот она. При устранении неполадок я выложил столько, сколько мог, поэтому, пожалуйста, не возражайте, где я соединяю простой текст с открытым текстом ...

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

Обновление: В ответ на Мэтта Лонга я вставил в вашу строку, и она отрисовала то же самое.

Обновление: В ответ на Fire Lancer я вернул свою первоначальную попытку и покажу вам оба ниже.

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>

Причина подстановки заключается в том, что URL-адрес проходит через rawurlencode () в другом месте, а ссылка на http% 3A% 2F% 2F заставляет страницу думать, что это локальная / относительная ссылка.

Обновление: Я вставил вышеупомянутый ответ, не смотря на это. Таким образом, HTML-код корректен при просмотре исходного кода, но фактическая страница интерпретирует его с другой косой чертой после него.

Решение: Все это было результатом rawlurlencode (). Если я расшифровал или пропустил кодировку все вместе, все работало отлично. Что-то в rawurlencode () заставляет браузер добавлять туда косую черту.

Ответы [ 7 ]

3 голосов
/ 01 октября 2008

У меня никогда не было этого, насколько точно вы повторяете ссылку? Все следующее должно работать.

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

изменить, так как вы добавили информацию.

Нельзя просто указывать http: // как href, даже если эта ссылка будет напрямую введена на html-страницу, это даст эффект например:
html:

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

ссылка (в FF3):

http:///
2 голосов
/ 01 октября 2008

Firefox, в частности, показывает вам источник html так, как он его видит, и редко так, как вы его отправили. Очевидно, что что-то в вашей ссылке или в ее контексте заставляет браузер интерпретировать косую черту.

Интересно, это побочный эффект от кодирования URL? Если вы будете использовать rawurldecode, это поможет. Если в URL-адресе есть части, которые необходимо закодировать, вы можете искать косые черты и просто возвращать их обратно.

1 голос
/ 01 октября 2008

Ошибка должна быть в другом месте. echo записывает строку, дословно. Никакая постобработка не сделана ни на какой части. Поэтому дополнительный слеш добавляется в другом месте вашего кода (перед передачей строки в echo).

0 голосов
/ 01 октября 2008

Вы смотрели в настройки PHP конфигурации? Это может быть magic_quotes_gpc, решивший уйти от вас (я был укушен этим параметром несколько раз, особенно при работе с трафиком AJAX / JSON). Попробуйте убедиться, что он выключен и снова отображается (вам может понадобиться отредактировать файл php.ini или добавить php_flag magic_quotes_gpc off в файл .htaccess в каталоге, в котором вы работаете, в зависимости от вашей среды).

0 голосов
/ 01 октября 2008

Как отметили некоторые парни, 'http://' не является действительной ссылкой, поэтому ваш браузер добавляет дополнительную косую черту в конце. Чтобы просмотреть его, попробуйте lynx -dump http://yourdomain/yourfile.php (если вам повезло иметь linux) или telnet с вашего компьютера на сервер в порту 80 и введите:

GET /path/file.php HTTP/1.0

и посмотрите на результат.

0 голосов
/ 01 октября 2008

Если я добавлю эту команду echo в мой PHP-код, она выдаст «http://", как и ожидалось (вы можете видеть это в источнике сгенерированного вывода), но когда я затем наведу указатель мыши на ссылку на получающейся странице (с IE7), он показывает http: ///.

Я предполагаю, что это поведение браузера, потому что не может быть ссылки http: // без имени хоста или IP-адреса (вы не можете просто получить доступ к протоколу).

0 голосов
/ 01 октября 2008

Получаете ли вы тот же результат, если используете двойные кавычки и избегаете внутренних двойных кавычек, подобных этой?

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