XETOWN

물어보기

https://www.xpressengine.com/qna/22837872#comment

 

php 5.5에서 사이트를 운영했을 때 해당 링크의 댓글에 달린대로 아래 php 용법을 사용하였습니다.

 

{@
    $search = array ("'<script[^>]*?>.*?</script>'si",  // 자바 스크립트 제거
                     "'<[\/\!]*?[^<>]*?>'si",           // HTML 태그 제거
                     "'([\r\n])[\s]+'",                 // 공백 제거
                     "'&(quot|#34);'i",                 // HTML 엔티티 치환
                     "'&(amp|#38);'i",
                     "'&(lt|#60);'i",
                     "'&(gt|#62);'i",
                     "'&(nbsp|#160);'i",
                     "'&(iexcl|#161);'i",
                     "'&(cent|#162);'i",
                     "'&(pound|#163);'i",
                     "'&(copy|#169);'i",
                     "'&#(\d+);'e");                    // php로 실행 
    $replace = array ("",
                      "",
                      "\\1",
                      "\"",
                      "&",
                      "<",
                      ">",
                      " ",
                      chr(161),
                      chr(162),
                      chr(163),
                      chr(169),
                      "chr(\\1)"); 
    $text_len = preg_replace($search, $replace, $oDocument->variables['content']);
}  
{mb_strlen(preg_replace("/(&([a-zA-Z]+)\;)|([\s\n\r]+)/","",$text_len), "UTF-8");}

 

php 7로 이전한 이후로는 위 php가 작동하지 않는 걸로 보면 아무래도 상위 버전으로 올라가면서 용도가 사라진 용법이 사용된 것 같은데 구체적으로 어떤 부분을 만져야 하는지 모르겠네요. 찾아보니 preg_replace도 mb_strlen도 php 7에서 다 쓰이고요. 위의 소스가 php 7에서도 돌아가도록 수정할 수 있으면 좋겠는데... 많이 어려울까요?

  • ?
    @제은일행 2016.08.15 21:13:49
    정규식에서 e 플래그는 제거되었어요. preg_replace_callback으로 대체하시면 돼요.
  • ?
    SimpleCode 2016.08.15 22:06:21
    preg_replace_callback으로 바꾸면 되는데, XE 템플릿 문법 때문에 깔끔하게 바꾸진 못할 것 같네요.
    PHP로 callback 함수를 정의해놓고 가져다 써야할 거에요.
  • profile
    Novelic 2016.08.16 19:40:59
    제 실력이 부족해서 이해는 못 하겠지만... 댓글 감사합니다.

서버에 요청 중입니다. 잠시만 기다려 주십시오...