preg_match 함수..
본문
Php5.3.0을 사용하면서 eregi 함수가 deprecate 되어서 수정중에있는데요.
몇몇 부분을 어떻게 수정해야할지 몰라 질문 드립니다.
eregi() 함수 대신 preg_match 함수에 i modifier 붙이는건 알고 있습니다.
그런데 따옴표 안에 있는 항목이 없어서 어떻게 수정해야할지 모르겠습니다.
에러메시지는 다음과 같습니다.
Warning: preg_match(): Delimiter must not be alphanumeric or backslash in /home/vivid-viewpoint/bbs/_head.php on line 248
그리고 해당 파일의 248번째 줄 전후는
// 로그인, 아웃, 회원 정보 수정, 쪽지 메뉴 버튼
$s_url = $REQUEST_URI;
if($id&!preg_match($id,$s_url)) { <<<<248번째 줄
if(preg_match("\?",$s_url)) $s_url = $s_url . "&id=$id";
else $s_url = $s_url . "?id=$id";
}
$s_url = urlencode($s_url);
어떻게 수정해야하나요?
비슷한 경우를 하나 더 가져오자면
include "_head.php";
if(!preg_match($HTTP_HOST,$HTTP_REFERER)) Error("정상적으로 글을 삭제하여 주시기 바랍니다.");
답변 2
패턴 앞뒤에 슬래쉬를 붙여주시면 됩니다.
preg_match("/$id/i",$s_url)
preg_match('/\?/',$s_url)
// 사이에 변수가 들어가는 경우 제어문자 주의하시구요.
/i 의 경우는 '대소문자 구분없이'라는 거니 단지 '?' 찾기 위해서는 넣어줄 필요가 없겠죠.
변경자가 들어가는 경우는 좀 더 부하가 걸리는걸로 알고있습니다. 필요없는 경우는 빼주는게 좋을거라 생각해서 일부러 안넣었었구요,
if(!preg_match("/$HTTP_HOST/i",$HTTP_REFERER))
이것도 아마도 정상적으로 잡아내긴 할겁니다만 도메인에 들어가는 점(.)문자가 제어문자로 쓰이니까 기왕이면 '/'.str_replace('.','\.',$HTTP_HOST).'/i' 로 해주는게 확실하겠죠.
답변을 작성하시기 전에 로그인 해주세요.