애드센스를 특정단어의 주소가 포함된 곳에서는 내보지 않으려고 조건을 사용했습니다.

그런데 이 조건을 애드센스 3개에 모두 사용하는데 금칙어를 추가할때 마다 모두 수정해야 하는 불편이 있어서요.

 

 

 

 

 

<!--@if (!(strpos($uri, '금칙어1') || strpos($uri, '금칙어2')))-->

 

이것을 좀 편하게...

 

$uri 에 미리 담아놓은 금칙어상자의 금칙어들과 같은게 있는지 확인하는 조건으로 쓰고 십습니다. 

in_array 인가요? 그걸 써야 하는거 같기도 하구요..

 

  • Lv36

    이럴 때 정규식을 사용하면 편합니다. in_array는 변수 전체가 정확하게 매칭되는 것을 찾을 때는 편하지만 중간에 포함된 것만 찾으려면 결국 루프를 돌려야 해서 효율이 떨어져요.

     

    <!--if(preg_match('/금지어1|금지어2|금지어3/', $uri))-->

     

    구분에 사용한 문자는 쉬프트+\ 입니다. 위의 조건은 금지어가 포함되어 있을 경우 참이 됩니다. 포함되지 않은 경우 참이 되도록 만들려면 preg_match 앞에 !를 붙여 주면 되겠지요?

     

    단, 금지어에 괄호나 마침표, 슬래시, 그 밖의 특수기호가 포함되어 있을 경우 정규식에서 다른 의미로 해석할 수 있으므로 마치 따옴표 안에서 따옴표를 쓸 때처럼 \. \( \) \[ \] \/ 이렇게 이스케이프 처리해야 합니다.

  • Lv36 Lv30

    금지어1|금지어2|금지어3 이거가 수시로 추가될 듯해서 따로 담아 두고 싶어서요...

    모바일까지 6군데를 건드려야 하다보니 금지어 상자 내용만 수시로 변경하고 싶어서요.

  • Lv36 Lv30
    $notallow_kd = array("금칙어1","금칙어2","금칙어3");
    $kd_list = implode("|",$notallow_kd);

    이렇게 하니 되네요.
  • Lv36 Lv30
    그런데 ㅋ

    <!--if(!preg_match('/$kd_list/', $uri))-->

    이건 에러가 나네요.. ㅋ
  • Lv36 Lv30
    <!--if(preg_match('/금지어1|금지어2|금지어3/', $uri))-->

    이거 그대로 복사해서 붙여 넣어도 에러가 나네요.
  • Lv30 Lv36
    제가 if 앞에 @를 빼먹었네요. 혹시 그것 때문일까요? 마지막에 <!--@end-->로 닫는 것을 빠뜨리셨거나...
  • Lv30 Lv36
    홑따옴표는 변수가 들어가지 않습니다. "/$kd_list/"는 될 거예요.
  • Lv36 Lv23
    '/$kd_list/'
    이거 양쪽 쌍따움표가 아니라 또 $kd_list의 문자가 정규식의 /의 내용으로 안나오고 그저 $kd_list 이라는 글자를 찾아 정규식을 하겠다 이렇게 되어서 그런거아닐까요?
  • Lv36 Lv30
    골뱅이가 저도 잘 안보였네요. 쌍따옴표로 하니 잘 됩니다. 감사합니다. 이제 금칙어 관리만 하게 잘 정리 되었습니다.