2017-02-28 2 views
0
$url="http://www.example.com/日本語/こんにちは.html"; 
$result=filter_var(urlencode($url), FILTER_VALIDATE_URL); 

URL을 인코딩 중입니다! 그렇다면 $returnfalse 인 이유는 무엇입니까?urlencode로도 php - filter_var가 false를 반환합니다.

+0

URL은 http://example.com/%E6%97%A5%E6%9C%AC%E8%AA%'할 필요가 :

당신이 그것을 인코딩 후 URL입니다 9E/% E3 % 81 % 93 % E3 % 82 % 93 % E3 % 81 % AB % E3 % 81 % A1 % E3 % 81 % AF.html'. 처음 URL이 유효하지 않은 경우 단순한 함수 호출로이를 쉽게 고칠 수 없습니다. – deceze

+0

@deceze 필터에서 여전히 유효하지 않습니다. – Blackbam

+0

@Blackbam ...? https://3v4l.org/POAWp – deceze

답변

1

urlencode을 사용하면 쿼리 매개 변수 값을 인코딩 할 수 있습니다. 그것은는 URL에 특별한 의미를 갖는 문자를 인코딩하면 전체 URL을 인코딩하는 경우 등 :, /, ?,

같은 - 쿼리 섹션의 값에 반대 - 그것은 더 이상 유효한 URL이 아닙니다.

http%3A%2F%2Fwww.example.com%2F%E6%97%A5%E6%9C%AC%E8%AA%9E%2F%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF.html 
0

아마 유효한 URL이 아니기 때문에 : 선택적으로 필요한 구성 요소 (» http://www.faqs.org/rfcs/rfc2396에 따라) URL로

의 유효성을 검사 값 : 워드 프로세서

http://php.net/manual/de/filter.filters.validate.php

. 유효한 URL은 HTTP 프로토콜을 지정하지 않을 수 있습니다. http : // 은 예상 프로토콜을 사용합니다. ssh : // 또는 mailto :. 함수는 ASCII URL이 유효 함을 알 수 있습니다. 국제화 된 도메인 이름 (비 ASCII 문자 포함)은 실패합니다.

URL 인코딩 된 URL은 urlencode가 URL에 잘못된 문자를 추가함에 따라 항상 실패합니다. 이 함수는 중국어 문자가있는 URL의 유효성 검사를위한 것이 아닙니다.

특히 마지막 줄은 정확하게 말합니다 : 함수는 ASCII URL 만 유효하다는 것을 알 수 있습니다. 국제화 된 도메인 이름 (비 ASCII 문자 포함)은 실패합니다.

편집 : @jeroen이 맞습니다. btw urlencode()은 전체 URL이 아닌 매개 변수를 인코딩합니다.

관련 문제