Безопасные символы для дружественного url



мне нужно сделать сайт, который будет иметь статьи, и я хотел бы сделать дружественные URL-адреса для него, например URL-адрес страницы с




Название: Тест-Статьи




должны стать: http://www.example.com/articles/article_test.



конечно, мне нужно удалить некоторые символы из названия, как ? или #, но я не уверен, какие из них удалить.



может кто-нибудь сказать мне, какие символы безопасны для хранения?

1020   13  

13 ответов:

процитировать раздел 2.3 из RFC 3986:

" символы, которые разрешены в URI, но не имеют зарезервированного цели называются незащищенными. К ним относятся верхний и нижний регистр буквы, цифры, дефис, точка, подчеркивание, Тильда."

ALPHA  DIGIT  "-" / "." / "_" / "~"

обратите внимание, что RFC 3986 содержит меньше зарезервированных знаков препинания, чем более старые RFC 2396.

есть два набора символов, вы должны следить за: резерв и небезопасных.

The резерв символы:

  • амперсанд ("&")
  • доллар
  • знак плюс ("+")
  • запятая (",")
  • косая черта ("/")
  • двоеточие (":")
  • точка с запятой (";")
  • равен ("=")
  • вопрос Марк ("?")
  • символ'At' ("@")
  • фунта ("#").

символы, как правило, считается небезопасных являются:

  • пробел (" ")
  • меньше и больше ("")
  • открыть и закрыть скобки ("[]")
  • открыть и закрыть фигурные скобки ("{}")
  • pipe ("|")
  • обратная косая черта ("\")
  • вставки ("^")
  • процентов ("% " )

Я, возможно, забыл один или несколько, что приводит к тому, что я повторяю ответ Карла V. В долгосрочной перспективе вам, вероятно, лучше использовать "белый список" разрешенных символов, а затем кодировать строку, а не пытаться быть в курсе символов, которые запрещены серверами и системами.

лучше всего хранить только некоторые символы (белый список) вместо удаления определенных символов (черный список).

вы можете технически разрешить любой символ, только если вы правильно его кодируете. Но, чтобы ответить в духе вопроса, Вы должны разрешить только эти символы:

  1. строчные буквы (преобразование верхнего регистра в Нижний)
  2. цифры от 0 до 9
  3. тире или подчеркивания _
  4. Тильда ~

все остальное имеет потенциально особое значение. Например, вы можете подумать, что можете использовать+, но его можно заменить пробелом. & тоже опасно, особенно при использовании некоторых правил перезаписи.

Как и в других комментариях, ознакомьтесь со стандартами и спецификациями для получения полной информации.

Всегда Безопасно

они безопасны (в теории / спецификации), в основном в любом месте, кроме доменного имени.
процентов-кодировать ничего не указано, и вы хорошо идти.

    A-Z a-z 0-9 - . _ ~ ( ) ' ! * : @ , ;

Иногда Безопасный

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

    Paths:     + & =
    Queries:   ? /
    Fragments: ? / # + & =

Никогда Не Было

согласно спецификации URI (RFC 3986), все остальные символы должны быть закодированы в процентах. Это включает в себя:

    <space> <control-characters> <extended-ascii> <unicode>
    % < > [ ] { } | \ ^

если максимальное совместимость-это проблема, ограничьте набор символов до A-Z a - z 0-9 -_.
(с периодами только для расширения).

unreserved = Альфа / цифра/" -"/"."/ "_" / "~"

смотрим RFC3986-единый идентификатор ресурса (URI): общий синтаксис ваш вопрос вращается вокруг путь компонент URI.

    foo://example.com:8042/over/there?name=ferret#nose
     \_/   \______________/\_________/ \_________/ \__/
      |           |            |            |        |
   scheme     authority       path        query   fragment
      |   _____________________|__
     / \ /                        \
     urn:example:animal:ferret:nose

цитируя раздел 3.3, допустимые символы для URI segment типа pchar:

pchar = unreserved / pct-encoded / sub-delims / ":" / "@"

который разбивается на:

ALPHA / DIGIT / "-" / "." / "_" / "~"

pct-encoded

"!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="

":" / "@"

или другими словами: вы можете использовать любой (неконтролируемый-) символ из таблица ASCII,за исключением/,?,#,[ и ].

это понимание подкрепляется RFC1738-унифицированные локаторы ресурсов (URL).

из контекста, который вы описываете, я подозреваю, что то, что вы на самом деле пытаетесь сделать, называется "SEO slug". Лучшая общая известная практика для них:

  1. преобразовать в нижний регистр
  2. преобразование целых последовательностей символов, отличных от a-z и 0-9, в один дефис ( - ) (не подчеркивание)
  3. удалите "стоп-слова" из URL-адреса, т. е. не-значимо-индексируемые слова, такие как "a", " an " и "the"; Google "стоп-слова" для обширных списки

Итак, в качестве примера, статья под названием " Использование !@%$* представлять нецензурной бранью в комиксах" получили бы пулю от "использования-представлять-ругань-комиксы".

формат URI определяется в RFC 3986. См. раздел 3.3 для деталей.

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

У меня была аналогичная проблема, я хотел иметь красивые URL - адреса и пришел к выводу, что я должен разрешить только буквы, цифры, - и _ в URL-адресах. Это нормально, тогда я написал несколько хороших регулярных выражений, и я понял, что он распознает все символы UTF8, а не Буквы в .NET и был завинчен. Это, по-видимому, известная проблема для .NET regex engine. Так что я добрался до этого решения:

private static string GetTitleForUrlDisplay(string title)
{
    if (!string.IsNullOrEmpty(title))
    {
        return Regex.Replace(Regex.Replace(title, @"[^A-Za-z0-9_-]", new MatchEvaluator(CharacterTester)).Replace(' ', '-').TrimStart('-').TrimEnd('-'), "[-]+", "-").ToLower();
    }
    return string.Empty;
}


/// <summary>
/// All characters that do not match the patter, will get to this method, i.e. useful for unicode chars, because
/// .NET impl of regext do not handle unicode chars. So we use char.IsLetterOrDigit() which works nicely and we 
/// return what we approve and return - for everything else.
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
private static string CharacterTester(Match m)
{
    string x = m.ToString();
    if (x.Length > 0 && char.IsLetterOrDigit(x[0]))
    {
        return x.ToLower();
    }
    else
    {
        return "-";
    }
}

Я нашел очень полезным кодировать мой url-адрес в безопасный, когда я возвращал значение через ajax/php в url-адрес, который затем снова читался страницей.

вывод PHP с кодировщиком url для специального символа &

//PHP returning the sucess info of ajax request
echo "".str_replace('&','%26',$_POST['name'])." category was changed";

//javascript sending the value to url
window.location.href='time.php?return=updated&val='+msg;

//javascript/php executing the function printing the value of the url,
//now with the text normally lost in space because of the reserved & character.

setTimeout("infoApp('updated','<?php echo $_GET['val'];?>');",360);

надеюсь, кто-нибудь найдет мои маленькие извлечения кода полезными! :)

Я думаю, что вы ищете что - то вроде "кодировка URL" - кодирование URL, чтобы он был "безопасным" для использования в интернете:

вот ссылка для этого. Если вы не хотите никаких специальных символов, просто удалите все, что требует кодировки URL:

http://www.w3schools.com/TAGS/ref_urlencode.asp

между 3-50 персонажей. Может содержать строчные буквы, цифры и специальные символы - точка(.), тире(-), подчеркивание(_) и по курсу(@).

Comments

    Ничего не найдено.