TIP게시판

제목 url_explode 수정 버젼
글쓴이 케이든 작성시각 2010/06/09 16:14:07
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 15816   RSS
http://codeigniter-kr.org/tip/view/303

위 페이지 맨 아래

우기파파님께서 만드신

url_explode 함수는 가져오려는 값이 비어있을경우

에러를 살짝 뱉게되어 수정해서 올립니다

class MY_URI extends CI_URI
{
	public function __construct()
	{
		parent::__construct();
	}
	
	public function get_next_segment($segment)
	{
		$key = array_search($segment, $this->segments);

		return $key && isset($this->segments[$key + 1]) ? $this->segments[$key + 1] : NULL;
	}
}


//사용 예

domain.com/controller/method/page/3/limit

echo $this->uri->get_next_segment('page');
//3

$this->uri->get_next_segment('limit');
//NULL

 다음글 유용한 PHP 개발툴 15가지 (4)
 이전글 image_lib->resize() 사용시 썸네일... (3)

댓글

배강민 / 2010/06/10 09:09:47 / 추천 0

근데, 문제가...흠.. 저도 이렇게 비슷하게 해보려다가 생긴 문제가....

domain.com/controller/method/page//limit/11

이렇게 page의 값을 null로 넣었을 경우, (물론 마지막 파라메터값이 null이면 문제없지만... 중간이면...)

page를 호출하면 null이 나와야하는데, 넘어가버려서 limit이 리턴되어버립니다.

$this->uri->segment(4)를 해도 null이 나와야 하는데, limit이 나와버립니다.. 같은 이유에서겠지요...

segments 세팅 자체가 저렇게 하고 있는듯....

그래서.. 전 http://codeigniter-kr.org/tip/view/508/page/1/ 이렇게 한....

흠... url을 다시 뽀개거나 segments 세팅하는 놈을 수정 혹은 재정의 하거나 해야하지 않을까 하는...

배강민 / 2010/06/10 09:12:30 / 추천 0
URI.php의

	function _explode_segments()
	{
		foreach(explode("/", preg_replace("|/*(.+?)/*$|", "\\1", $this->uri_string)) as $val)
		{
			// Filter segments for security
			$val = trim($this->_filter_uri($val));

			if ($val != '')
			{
				$this->segments[] = $val;
			}
		}
	}
여기서 값이 있을때면 배열 세팅을 하기 때문인거 같은데... 저놈을 근본적으로 수정해버리면 되겠지만... 문제가 없을지 모르겠네요...흠...
케이든 / 2010/06/10 09:29:22 / 추천 0
그러게 말입니다

그래서 저는 숫자값 만 넣을수 있는 것들은 아래처럼 한번 더해줍니다

나머지것들도 적당히 처리하구요
$page = $this->uri->get_next_segment('page');

$page = is_numeric($page) ? $page : 1;

배강민 / 2010/06/10 09:40:21 / 추천 0
흠... 이래저래 상황에 맞게 하면 되긴 하겠지만,...쩝... 뭔가 찜찜하고 귀찮아서요...ㅋ

파라메터명으로는 절대 숫자를 쓰지 말기로 하면, ( 대부분 그렇지만 아닐수도 있으므로)

page 값 같은 경우는 되겠지만, 문자열을 받는 경우에는....흠...

물론 받을 문자열을 제한할 수도 있고 그래야 맞는 경우도 있겠지만, 게시판 검색등에서는 그도 불가능에 가까운거 같고요....

쩝... url을 다시 뽀개긴 웬지 싫고...흠.....전 일단 제가 만든 방식으로 가야겠네요... 일단 이번 프로젝트에서는....

누가 저의 고민을 해결해주소서~~~ 깔쌈하겡~~~
양승현 / 2010/06/14 14:45:29 / 추천 0
음.. 그냥 간단히 사용하려고 했던건데 다들 저렇게 사용하시려고 하는군요.
전 웅파형님이 만든것과 제가 만든것 혼용해서 사용중입니다. ㅋㅋ
변종원(웅파) / 2010/06/14 14:59:06 / 추천 0
KangMin/ 변수가 null일 경우는 사실 입력자가 잘못 입력하거나 검색의 경우 검색어를 입력하지 않거나(이건 js에서 미리 처리가능하니까 막을 수 있고) 그 이외에는 null일 이유가 없는건데...
케이든님이 하신 것처럼 page 같은 경우는 null이면 무조건 1로 셋팅해서 미리 처리를 하고
그외 변수도 마찬가지로 처리를 하면 되기는 하는데 변수가 많아질 경우 문제도 되고..

어차피 보안이나 프로그램 무결점을 생각한다면 각각의 모든 변수에 대해 내부에서 처리를 거치는 것이 맞다고 봄.
변수가 몇개던지 상관없이 프로그램 내부에서 사용되는 변수에 대해서는 잘못된 값이나 null이 들어왔을때의 처리는 당연히 해야함. 

고로 ci 함수던지 커스텀함수던지 주소 쪼개고 무결점 검사하고 반환하는 과정은 보안상 필수라고 생각이 됨.