Адекватная замена URL-адресов / в URL-адресах
-
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, или даже подчеркивание _, поскольку оба они идеально подходят для удобочитаемости.