preg_match 함수..

preg_match 함수..

QA

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)​ 

// 사이에 변수가 들어가는 경우 제어문자 주의하시구요.

preg_match('/\?/',$s_url)​ 에서는 i modifier사용하지 않는건가요..?ㅜ
더불어
if(!preg_match($HTTP_HOST,$HTTP_REFERER))  이 라인도
 
if(!preg_match("/$HTTP_HOST/i",$HTTP_REFERER))
이렇게 바꿔주면 되는것인지요..?ㅎㅎ

/i 의 경우는 '대소문자 구분없이'라는 거니 단지 '?' 찾기 위해서는 넣어줄 필요가 없겠죠.

변경자가 들어가는 경우는 좀 더 부하가 걸리는걸로 알고있습니다. 필요없는 경우는 빼주는게 좋을거라 생각해서 일부러 안넣었었구요,

 

if(!preg_match("/$HTTP_HOST/i",$HTTP_REFERER))

이것도​ 아마도 정상적으로 잡아내긴 할겁니다만 도메인에 들어가는 점(.)문자가 제어문자로 쓰이니까 기왕이면 '/'.str_replace('.','\.',$HTTP_HOST).'/i' 로 해주는게 확실하겠죠.

답변을 작성하시기 전에 로그인 해주세요.
전체 12,369
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT