Повторить Ссылку, Получить косую черту в конце?

StackOverflow https://stackoverflow.com/questions/158104

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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() заставляет браузер захотеть вставить туда завершающую косую черту.

Это было полезно?

Решение

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

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

Другие советы

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

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:///

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

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

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

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

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

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

GET /path/file.php HTTP/1.0

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top