2009-07-07 2 views
2

В моем HTML, можно ли использовать ссылку на символ « » вместо «%20» в веб-адресах?Могу ли я заменить% 20 ​​на & nbsp в URL-адресах с пробелами?

Они оба пространства, не так ли?

+2

Какую возможную причину вы могли бы хотеть сделать в первую очередь? У меня такое чувство, что я не хочу знать ... – Welbog

+0

Что вы пытаетесь сделать точно? –

+0

@Pup: Проблема в том, что URL-адреса и HTML - это две совершенно разные вещи, которые соответствуют различным правилам. Вы не можете предположить, что правило для одной системы автоматически истинно для другого, только потому, что они используются совместно. – Tomalak

ответ

14

Короткий ответ: они оба используются для представления «пробелов», но они представляют разные пространства.

%20 - это URL-адрес экранирования для байта 32, который соответствует простому старому пространству практически в любой кодировке, которую вы, вероятно, будете использовать в URL-адресе.

  - это ссылка на HTML-символ, которая на самом деле относится к символу 160 Юникода (а также ISO-8859-1 aka Latin-1). Это совсем другой космический персонаж - «неразрывное пространство». Хотя они выглядят почти одинаково, они разные персонажи, и маловероятно, что ваш сервер будет обрабатывать их одинаково.

+0

Различия между этими двумя типами пространственных представлений в стороне, знаете ли вы, разрешены ли ссылки объектов сущности html в URL-адресах либо по спецификации, либо в практических реализациях? – Matt

+0

@Matt Да и нет. Ссылки на символы HTML-символов разрешены в URL-адресах * в HTML-документах *. Фактически, амперсанды в URL-адресах в документах HTML должны быть экранированы с помощью HTML. Наличие «http: //example.com/foo? Bar = 1 & baz = 2'» в HTML фактически недействительно. Это должно быть '' http://example.com/foo?bar = 1 & baz = 2' ". Тем не менее, ссылка на объект HTML на самом деле не является« в URL ». Она находится в представлении HTML этого URL-адреса. В самом URL-адресе есть' & ', где HTML содержит' & '. –

+0

@Matt Почти забыл: я считаю, что древние версии MSIE пытались использовать ссылки на символы символа HTML в представлениях форм для символов, которые не могли быть представлены в наборе символов, используемых для отправки формы. Это вообще не соответствует стандартам , что не слишком удивительно для MSIE. –

6

№ Ни одно из них не является пространством (технически). Оба представляют пространства по-разному. Приложите все усилия, чтобы НЕ иметь пробелы или представителей пробелов в ваших URL-адресах. Многие считают это более элегантным (меня включили), чтобы заменить пробелы _ или -

+1

В зависимости от вашей точки зрения это не совсем правильно. '% 20' представляет пробел, но'   'представляет собой * неразрывное * пространство, технически отдельный символ. Поэтому, даже если было бы неплохо использовать HTML-экранирование в URL-адресах, это не сработает, потому что оно заменит один символ другим, изменив значение URL-адреса. –

+0

Как это отличается от моего ответа? – Sampson

+0

Не просто представляют пространства по-разному, представляют разные пространства. –

4

№ & nbsp; представляет собой объект неразрывного пространства HTML; этот объект не имеет смысла при использовании в файловой системе или где-либо еще, что может указывать URL. URL-адреса не кодируются в HTML.

+0

Вы можете иметь неразрывные пробелы в именах файлов, по крайней мере, в некоторых файловых системах. Вероятно, это не очень хорошая идея, но говоря, что «этот объект не имеет смысла при использовании в файловой системе» идет слишком далеко. Это просто еще один персонаж. (И если вы ссылаетесь на ссылку сущности,  , он говорил об использовании этого в HTML, поэтому браузер позаботится о преобразовании ссылки сущности в соответствующий символ.) –

2

% 20 это то, что вы получаете с кодировкой URL, так что это то, что вы должны использовать, если собираетесь использовать его в URL-адресе.

& nbsp; это объект HTML, который должен использоваться для «нераспадающегося пространства» в HTML-документе.

2

Нет, не в URL-адресах. То, что вы может do, заменяет пробелы в текстовом представлении URL.

Таким образом, вместо:

<a href="http://some.site/doc%20with%20spaces">http://some.site/doc%20with%20spaces</a> 

вы можете иметь:

<a href="http://some.site/doc%20with%20spaces">http://some.site/doc&nbsp;with&nbsp;spaces</a> 
+0

Кто-нибудь знает, почему ' ', что У меня в нижней выборке не появляется? Раньше это было так ... – Tomalak

+1

Потому что это превратилось в пространство! Использовать & nbsp; для того, чтобы он отображался правильно. –

+3

Snap! Вы действительно думаете, что это причина? ;-) Серьезно - я думал, что раздел «код» должен отображать его содержимое * verbatim *. И я думал, что это делалось до недавнего времени. Теперь, если я напишу ' nbsp;', я боюсь, что это покажется в какой-то момент ... – Tomalak

0

Ни пробелы. Вы не должны использовать пробелы, но если для того, что когда-либо причине вы не можете избежать этого, вы просто должны быть в состоянии сделать ...

<a href="Web Page.aspx">Hey there</a> 

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

WebSite/Web%20Page.aspx 
0

Большинство людей стараются полностью избегать пробелов в именах файлов в URL-адресах. Они будут давать вам серьезную головную боль каждый раз, поэтому постарайтесь это сделать.

Если вы хотите иметь пробелы в URL-адресе, вам необходимо закодировать их с помощью% 20.

& nbsp используется браузером, чтобы узнать, как отображать страницу. Эта информация используется только для отображения. % 20 будет отправлено на сервер, который будет управлять всем необходимым для передачи веб-страницы вашим посетителям. Сервер не говорит html, поэтому сервер будет интерпретировать & nbsp как обычную часть имени файла и искать файл, названный так, как foo   bar. Этот файл не будет найден. Гораздо хуже веб-сервер будет думать, что & начинает переменную часть URL-адреса и ищет только страницу foo, а затем пытается сгенерировать переменную nbsp и переменную панель, но он хочет увидеть любые значения для них. В целом веб-сервер не может обрабатывать URL-адрес с  .

+1

Сервер не говорит по HTML, но он говорил об этом, используя это в своем HTML. Браузер * * интерпретирует ссылки на символы в атрибутах, включая URL-адреса, и поэтому   превратится в неразрывное пространство. Сервер никогда не увидит & (или «nbsp;», если на то пошло). –

+0

Итак, сервер увидит нормальное пустое пространство. Это тоже плохо :) – Janusz

+0

Нет, он увидит символ без разрыва. Это обычный персонаж из обычного пространства. –

 Смежные вопросы

  • Нет связанных вопросов^_^