기사가있는 웹 사이트를 만들어야하며, URL이 포함 된 페이지의 URL과 같이 친숙한 URL을 만들고 싶습니다.
제목 : 기사 테스트
되어야합니다 : http://www.example.com/articles/article_test
.
물론 내가 좋아하는 제목에서 일부 문자를 제거해야 ?
하거나 #
,하지만 확실히 제거 할 것 아니에요.
어떤 캐릭터가 보관하기에 안전한지 말해 줄 수 있습니까?
답변
RFC 3986의 2.3 절을 인용하면 :
“URI에서 허용되지만 예약 된 목적이없는 문자는 예약되지 않은 문자라고합니다. 대문자 및 소문자, 십진수, 하이픈, 마침표, 밑줄 및 물결표를 포함합니다.”
ALPHA DIGIT "-" / "." / "_" / "~"
RFC 3986에는 이전 문장 부호보다 예약 된 문장 부호가 적습니다. RFC 2396 .
답변
주의해야 할 문자 세트는 reserved 및 unsafe 입니다.
예약 문자는 다음과 같습니다
- 앰퍼샌드 ( “&”)
- 달러 ( “$”)
- 더하기 부호 ( “+”)
- 반점 (“,”)
- 슬래시 ( “/”)
- 콜론 ( “:”)
- 세미콜론 ( “;”)
- 같음 ( “=”)
- 물음표 (“?”)
- ‘At’기호 ( “@”)
- 파운드 ( “#”).
일반적으로 안전하지 않은 것으로 간주되는 문자 는 다음과 같습니다.
- 우주 (” “)
- 보다 작거나 큼 ( “<>”)
- 열기 및 닫기 괄호 ( “[]”)
- 열기 및 닫기 괄호 ( “{}”)
- 파이프 ( “|”)
- 백 슬래시 ( “\”)
- 캐럿 ( “^”)
- 퍼센트 ( “%”)
나는 하나 이상을 잊어 버렸을 수 있으며, 이는 칼 V의 대답을 에코합니다. 장기적으로는 서버 및 시스템에서 허용되지 않는 문자를 유지하려고 시도하는 대신 허용되는 문자의 “화이트리스트”를 사용한 다음 문자열을 인코딩하는 것이 좋습니다.
답변
특정 문자 (블랙리스트)를 제거하는 대신 일부 문자 (화이트리스트) 만 유지하는 것이 가장 좋습니다.
제대로 인코딩하는 한 기술적으로 모든 문자를 허용 할 수 있습니다. 그러나 질문의 정신으로 대답하려면 다음 문자 만 허용해야합니다.
- 소문자 (대문자를 소문자로 변환)
- 숫자, 0 ~ 9
- 대시 또는 밑줄 _
- 틸드 ~
다른 모든 것에는 잠재적으로 특별한 의미가 있습니다. 예를 들어 +를 사용할 수 있다고 생각할 수 있지만 공백으로 바꿀 수 있습니다. &는 특히 일부 다시 쓰기 규칙을 사용하는 경우에도 위험합니다.
다른 의견과 마찬가지로 자세한 내용은 표준 및 사양을 확인하십시오.
답변
항상 안전
이것들은 기본적으로 도메인 이름을 제외한 모든 곳에서 안전합니다 (이론 / 사양).
목록에없는 것을 백분율로 인코딩하면 좋습니다.
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 슬러그’라고 생각합니다. 이를위한 가장 일반적인 알려진 방법은 다음과 같습니다.
- 소문자로 변환
- az 및 0-9 이외의 모든 문자 시퀀스를 하나의 하이픈 (-)으로 변환합니다 (밑줄이 아님).
- URL에서 ‘중지 단어’, 즉 ‘a’, ‘an’및 ‘the’와 같이 의미가 색인 할 수없는 단어를 제거하십시오. 광범위한 목록을위한 Google ‘중지 단어’
예를 들어, “만화에서 욕설을 표현하기 위해! @ % $ *의 사용법”이라는 제목의 기사는 “usage-represent-swearing-comics”의 슬로건을 얻게됩니다.