[url] 친숙한 URL을위한 안전한 문자 [닫힘]

기사가있는 웹 사이트를 만들어야하며, URL이 포함 된 페이지의 URL과 같이 친숙한 URL을 만들고 싶습니다.

제목 : 기사 테스트

되어야합니다 : http://www.example.com/articles/article_test.

물론 내가 좋아하는 제목에서 일부 문자를 제거해야 ?하거나 #,하지만 확실히 제거 할 것 아니에요.

어떤 캐릭터가 보관하기에 안전한지 말해 줄 수 있습니까?



답변

RFC 3986의 2.3 절을 인용하면 :

“URI에서 허용되지만 예약 된 목적이없는 문자는 예약되지 않은 문자라고합니다. 대문자 및 소문자, 십진수, 하이픈, 마침표, 밑줄 및 물결표를 포함합니다.”

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

RFC 3986에는 이전 문장 부호보다 예약 된 문장 부호가 적습니다. RFC 2396 .


답변

주의해야 할 문자 세트는 reservedunsafe 입니다.

예약 문자는 다음과 같습니다

  • 앰퍼샌드 ( “&”)
  • 달러 ( “$”)
  • 더하기 부호 ( “+”)
  • 반점 (“,”)
  • 슬래시 ( “/”)
  • 콜론 ( “:”)
  • 세미콜론 ( “;”)
  • 같음 ( “=”)
  • 물음표 (“?”)
  • ‘At’기호 ( “@”)
  • 파운드 ( “#”).

일반적으로 안전하지 않은 것으로 간주되는 문자 는 다음과 같습니다.

  • 우주 (” “)
  • 보다 작거나 큼 ( “<>”)
  • 열기 및 닫기 괄호 ( “[]”)
  • 열기 및 닫기 괄호 ( “{}”)
  • 파이프 ( “|”)
  • 백 슬래시 ( “\”)
  • 캐럿 ( “^”)
  • 퍼센트 ( “%”)

나는 하나 이상을 잊어 버렸을 수 있으며, 이는 칼 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>
    % < > [ ] { } | \ ^

최대 호환성이 문제가되는 경우 문자 세트를 AZ az 0-9-_로 제한하십시오.
(파일 이름 확장자에만 마침표 사용).

상황을 항상 염두에 두십시오

사양에 따라 유효하더라도 상황에 따라 URL은 여전히 ​​”안전하지 않은”상태 일 수 있습니다. 잘못된 파일 이름 문자가 포함 된 file : /// URL 또는 구분 기호로 사용되지 않는 경우 “?”, “=”및 “&”를 포함하는 쿼리 구성 요소 이러한 경우를 올바르게 처리하는 것은 일반적으로 스크립트에 따라 다르며 해결 될 수 있지만 명심해야합니다.


답변

보면 RFC3986 -이 URI (Uniform Resource Identifier) : 일반 구문 의 주위에 당신의 질문의 공전 경로 는 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 = 예약되지 않은 / pct 인코딩 / 하위 전송 / “:”/ “@”

다음과 같이 분류됩니다.

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

pct-encoded

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

":" / "@"

또는 다른 말로하면 : 당신은에서 모든 (비 제어 -) 문자를 사용할 수 ASCII 테이블 , 제외시켰다 / , ?, #, [].

이 이해는 RFC1738-URL (Uniform Resource Locator)에 의해 뒷받침됩니다 .


답변

예약되지 않음 = ALPHA / DIGIT / “-“/ “.” / “_”/ “~”


답변

당신이 묘사하는 맥락에서, 당신이 실제로하려는 것은 ‘SEO 슬러그’라고 생각합니다. 이를위한 가장 일반적인 알려진 방법은 다음과 같습니다.

  1. 소문자로 변환
  2. az 및 0-9 이외의 모든 문자 시퀀스를 하나의 하이픈 (-)으로 변환합니다 (밑줄이 아님).
  3. URL에서 ‘중지 단어’, 즉 ‘a’, ‘an’및 ‘the’와 같이 의미가 색인 할 수없는 단어를 제거하십시오. 광범위한 목록을위한 Google ‘중지 단어’

예를 들어, “만화에서 욕설을 표현하기 위해! @ % $ *의 사용법”이라는 제목의 기사는 “usage-represent-swearing-comics”의 슬로건을 얻게됩니다.