Адекватная замена URL-адресов / в URL-адресах

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

  •  05-07-2019
  •  | 
  •  

Вопрос

Быстрый.

Я использую переписывание модов, и у меня есть большинство замен:

  • пустое место = _
  • æ = ae
  • Æ = ae

и так далее.

Каким будет естественный замещающий символ для /?

Спасибо

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

Решение

Подчеркивание считается символом слова, поэтому foo_bar это одно слово, а не два слова.Но дефис не считается символом слова, поэтому foo-bar это два слова.

Поэтому вам следует использовать дефис - везде, где вы хотите разделить две части и подчеркивание _ там, где вы хотите соединить две части.В случае / который используется для разделения, я бы предпочел дефис -.

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

  • Æ = ае

Вам не обязательно это делать.Вы можете помещать в URL-адрес символы Юникода, отличные от ASCII, так же, как байты в кодировке UTF-8.Так:

http://en.wikipedia.org/wiki/%C3%86

отображается в браузерах как:

http://en.wikipedia.org/wiki/Æ

и любой из них можно вставить в адресную строку.

Пробел и косая черта могут быть закодированы как %20 и %2F.Однако эти формы по-прежнему отображаются в браузере в виде процентов, поскольку в противном случае они являются зарезервированными символами.Поэтому они выглядят не так красиво.Существует дополнительная проблема с %2F, заключающаяся в том, что традиционные среды сценариев, основанные на CGI, не могут их прочитать, а Apache по умолчанию намеренно блокирует их, чтобы такие сценарии не путались и не оставляли дыр в безопасности.

Поэтому я делаю заголовки, полностью удалив:

# % ' ( ) ? [ ] (U+00AD soft hyphen)

вместе с любыми управляющими символами (от U+0000 до U+001F, кроме U+00A0 и от U+007F до U+00BF).Затем заменив любую серию:

" $ & * + , / : ; < = > @ \ ^ (U+0020 space) (U+000A newline)

с одним подчеркиванием.Это устраняет необходимость появления последовательности %xx в URL-адресе.(Для символов Юникода по-прежнему будут последовательности %xx, но пользователь их не увидит.)

Если хотите, вы можете использовать дефис вместо подчеркивания, в зависимости от того, что лучше.Поисковые системы должны быть в порядке и с тем, и с другим.

ETA прокомментирует другой ответ:

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

Однако в этом случае вы не сможете сделать с персонажами ничего непоправимого.Вы не можете изменить «Æ» на «ae», пробелы должны быть закодированы как «%20», а косая черта — как «%2F».Это приведет к созданию немного некрасивых URL-адресов, а «%2F» вызовет проблемы с развертыванием на Apache и IIS.

Если вам нужно ввести ключ только для заголовка, вам нужно будет добавить столбец (УНИКАЛЬНО индексированный) в обработанный фрагмент для поиска, как предложено выше.Однако учтите, что в этом случае вы не сможете переименовать/исправить заголовок страницы, так как это изменит фрагмент, нарушив URL-адрес.

Распространенный подход к решению этой проблемы — включение числового идентификатора в дополнение к пулу (см., например, как это делает SO).Вы также можете использовать 301-редирект, если имя пула неправильное, для оптимального SEO.

Я бы использовал тире, поскольку Google разделяет подобные слова в целях SEO, или даже подчеркивание _, поскольку оба они идеально подходят для удобочитаемости.

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