TIP게시판

제목 [함수] url에서 한글만 추출해서 인코딩 하는 함수입니다..
글쓴이 터프키드 작성시각 2009/09/04 19:25:48
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 22695   RSS
처음으로 팁게에 글을 쓰네요^^
웅파님이 아이디어를 주셔서 구글링, 스쿨링 해서 만들어봤습니다
function get_encoded_hurl($str) {
	
	preg_match_all('/[\x{1100}-\x{11ff}\x{3130}-\x{318f}\x{ac00}-\x{d7af}]+/u', $str, $matches);
	
	foreach($matches as $key2 => $val2) {
		$cnt = count($val2);
		if($cnt > 0) {
			foreach($val2 as $key3 => $val3) {
				$str = str_replace($val3, urlencode($val3), $str);
			}
		}
	}
	return $str;
}
// 사용
$encoded_url = get_encoded_hurl("http://어쩌구 저쩌구/하하-우리는_천재님들~good")

PHP 스쿨의 송효진님이 오래전에 07년도에 답변달아놓은 글을 참조해서
바꿔봤습니다만.. 아마 foreach를 두번 돌리는 방법보다 더 좋은 방법이 있을듯 한데요..

왜 두번 돌렸나면요.. http://어쩌구 저쩌구/하하-우리는_천재님들~good
이럴경우에 하하, 우리는, 천재님들이 리턴되서
join 해버리면 "하하우리는천재님들"이 되서
바꿀수가 없더라구요.. 그렇다고 특수문자까지 해석하면서 하긴 제 실력이...

더 좋은 방법이 생각나시면 꼭 답변으로 알려주세요;ㅠㅠ
좋은 주말되시구요.. 제가 오늘 급 야근 하게되서.. (금욜날;;) 정모참석을 못할거 같습니다..
담에 꼭 참석할께요
 다음글 클라이언트 에서 form validation해주는 j... (1)
 이전글 matchbox 0.9.4에서 form_validati... (1)

댓글

변종원(웅파) / 2009/09/05 19:54:16 / 추천 0
아.. 주소를 프로그램에서 생성하는게 아닌가보네요.
전 주소를 프로그램에서 생성을 하면 그냥 한글부분만 urlencode 해서 붙인다라는 이야기였습니다.
어쨌든 괜찮은 함수 하나 더 생겼습니다.
감사합니다.
터프키드 / 2009/09/07 19:42:52 / 추천 0
네 대부분 블로그 url인데 pretty url을 사용하면서 한글로 쓰는 블로그들이 많더라구요
접수된 블로그주소를 한글만 변경해야되서..
근데 언제 또 어떤 문제가 생길지 모르겠어요
하도 다양해서..;
kirrie / 2009/09/09 22:15:24 / 추천 0
function mb_urlencode($url)
{
   return str_replace(
      array('%3A', '%2F', '%3F', '%3D', '%26'), 
      array(':', '/', '?', '=', '&'),
      urlencode($url)
   );
}
일단 전체 url에 대해서 urlencode를 쓰면 영문과 숫자를 제외한 멀티바이트 캐릭터와 특수기호가 다 인코딩 됩니다.
여기에 착안해서 전체 url을 인코딩 한 다음에 : / ? = & 등 기본적으로 url에 사용되는 특수기호만 원래 기호로 치환하면 되지 않을까요?