커뮤니티토픽게시판

매번 애드온에 의존해야 하는 환경은 아니기에 (  https://xetown.com/topics/1390085 )
필요한 콘텐츠를 가져올 때 그 안에 포함된 사이트 외부 링크를 새 창으로 띄우게 됐습니다.

 

$server_name = str_replace('.', '\.', $_SERVER['SERVER_NAME']);
$pattern = '/(<a\s+href="http:(?!\/\/(?:www\.)?'. $server_name .')[^"]*")>/is';
$_signature = getModel('member')->getSignature('해당 회원 번호');
$result = preg_replace($pattern, '\1 target="_blank">', $_signature);

 

이렇게만 해도 되는지 확신은 없습니다.

예컨대 도메인 가져올 때 SERVER_NAME으로 가져와도 되는지,

스택오버플로우에서 갖고 온 정규식 패턴이 언제나 잘 먹는 건인지 등등..

 

어쨌든 일단 테스트 결과로는 잘 작동하네요 :)

글쓴이 윤삼

profile
사물이 거울에 보이는 것보다 가까이 있음
  • profile

    SERVER_NAME 쓰지 마세요. XE에는 기본URL이라는 것이 있습니다. 그리고 스택오버플로우에서 복붙하신 것은 https 지원 여부, 프로토콜 상대경로, <a href 사이에 다른 속성이 들어갈 가능성, 예상치 못한 특수문자, 이미 target 속성이 있을 가능성 등을 전혀 감안하지 않고 만든 정규식 같습니다. 대충 된다면 상관없을 수도 있지만, 우회하거나 망가뜨릴 수 있는 방법이 훤히 보이네요;;;
     

  • profile profile
    아 역시 뭔가 문제가 있을줄 알았어요.
    그냥 js로 새창 띄우기 하는 걸로 해야겠습니다ㅋㅋㅋ