아래와 같은 코드로 @닉네임으로 본문에서 누군가 호출 할때 자동으로 호출된 회원의 링크가 달리도록 처리했습니다.

 

 

<block loop="$mention_result=>$key,$val">
{@ $content_ = preg_replace("/@$val/", "<a href='/@".$val."' style='color:#07F; font-weight:500; display:inline-block; text-decoration:none;'>$0</a>", $content_); }
</block>
{$content_}      

 

 

그런데 문제가... 

 

@홍길동 @홍길동1 과 같은 동일한 연속된 문자가 겹치는 경우

 

모두 @홍길동으로 치환되어 버립니다. 이걸 어찌 해결해야 하나요..  ㅡㅡ;

  • profile
    정규표현식으로..
  • profile profile
    알려주시면 감사하겠습니다.
  • profile
    지금 현상만 보았을때
    단어가 포함된 경우 치환을 먼저 해버려서 완전일치하는 두번째 실제 치환해야할 대상으로 치환을 못하는 것 같습니다.
  • profile
    @아이디[$\s]

    <block loop="$mention_result=>$key,$val">
    {@ $content_ = preg_replace("/@$val[$\s]/", "<a href='/@".$val."' style='color:#07F; font-weight:500; display:inline-block; text-decoration:none;'>$0</a>", $content_); }
    </block>
    {$content_}
  • profile profile

    @아이디[$\s] 이게 무슨 의미인가요?

    본문에 회원들이 적을때는 @홍길동 @홍길동아빠 @홍길동엄마 이라고 적습니다.

  • profile profile
    $mention_result 에는 배열로
    홍길동,홍길동아빠,홍길동엄마 로 담기게 되구요.
  • profile profile
    시도 해보았는데 공백이 사라지는 현상이 있구요.

    철수 영수 홍길동 홍길동아빠 바둑이

    -> @철수@영수@홍길동@홍길동아빠바둑이 (마지막 바둑이 치환이 안됩니다.)
  • profile profile

    {@ $content_ = preg_replace("/(@$val)([$\s<&,님])/u", "<a href='/@".$val."' style='color:#07F; font-weight:500; display:inline-block; text-decoration:none;'>$1</a>$2", $content_); }

    1. 공백까지 치환 대상에 포함되므로, </a> 태그를 단은 후에 원래대로 다시 붙여줍니다. 정규식에서 특정 부분을 (괄호)로 묶으면 각각 순서대로 $1, $2 등으로 참조할 수 있습니다. $0은 정규식 전체에 해당하고요.

    2. 아마 바둑이 뒤에 </p> 태그나 <br /> 태그, &nbsp; 같은 것이 붙어 있었을 거예요. HTML 콘텐츠에서 마지막 글자 뒤에 붙을 만한 것은 이 세 가지가 가장 흔하니, <나 &도 치환 대상에 포함시켜 봅니다. 그 밖에 쉼표와 "님"도 인식하도록 해보고, 한글이 들어갔으므로 정규식 맨 뒤에 /u를 붙여 유니코드 호환성을 확보합니다.

  • profile profile
    시도해 볼게요. 그런데 이거 반복문으로 치환을 여러번 하면서 문제가 생길 수 있어서 아마 방법 자체를 폐기해야 할 수도 있어 보입니다.

    다양한 문제가 나올 수 있을 것 같아요.
  • profile profile
    오.. 요거 안정적으로 잘 되는 듯 합니다. 일단 다른 문제가 더 나오는지 더 검토해보겠습니다.
    감사합니다!!!!
  • profile profile
    태그 시작 문자를 포함시켜 버린 것이 좀 불안하기는 한데요... $mention_result 배열 내에 닉네임들이 어떻게 정렬되어 있는지에 따라 다르게 작동할 수도 있습니다.

    길이순으로 정렬해서 "홍길동"을 반드시 "홍길동엄마"보다 먼저 처리하도록 하거나, 역순으로 먼저 "홍길동엄마"를 치환한 후 거기에 포함되지 않은 "홍길동"만 따로 찾는다면 정규식을 좀더 치밀하게 짤 수 있을지도 모르겠네요.

    그러나 지금 잘 된다면 괜찮습니다^^
  • profile profile
    예상했던 문제들이 나타나지 않네요. 일단 훌륭한 것 같습니다. 기존에 작성했던 팁을 as 할테니 한번 봐주세요 ㅋㅋ
  • profile profile
    "홍길동"을 먼저 치환하면 "홍길동" 뒤에 </a> 태그가 붙어버려서 더이상 "홍길동엄마"는 매칭되지 않을 테니 괜찮을 것 같고요...

    "홍길동엄마"를 먼저 치환하면 여전히 "홍길동"이 남아 있겠지만 바로 뒤 문자가 공백이나 <, & 등이 아니라 "엄"이기 때문에 정규식에 매칭되지 않아서 괜찮을 것 같습니다.

    단, "홍길동&임꺽정"이나 "홍길동님하"라는 닉네임이 있다면 "홍길동" 뒤에서 <, &, 님 등의 문자를 찾는 정규식에 매칭될 수도 있겠네요.
  • profile profile

    님자가 들어간 닉네임은 알림센터에서 조차 문제가 있을 것 같기도 합니다. 특수기호는 어차피 사용안하니 상관은 없는데요...

    +님 까지 호출에 사용하려면 어쩔수 없는 부분 같아요.

  • profile

    홍길동 -> @홍길동
    홍길동아빠 -> @홍길동아빠
    홍길동엄마 -> @홍길동엄마 

    이렇게 됩니다. 홍길동 단어가 포함된 녀석 치환하니 모두 같은 동작을 하게 되는 듯 하네요.

     

     

    홍길동 -> @홍길동
    홍길동아빠 -> @홍길동아빠
    홍길동엄마 -> @홍길동엄마 

    홍길동님-> @홍길동

    이렇게 되어야 하는데요....

     

    이거 왠지 포기각.....