Повторить Ссылку, Получить косую черту в конце?
-
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 в каталоге, в котором вы работаете, в зависимости от вашей среды).