[PHP] 끝의 세 글자를 별표로 바꾸기

PHP를 사용하여 끝의 세 글자를 별표로 처리하는 방법

이전 글에서 이름의 첫 글자와 마지막 글자만 표시되도록 하는 방법을 살펴보았습니다. 이와 비슷한 연장선상에서 제목이나 회사 이름 등에서 끝의 몇 글자(예: 세 글자)만을 별표(*) 처리하는 방법에 대해 살펴보겠습니다.

문의 폼 등에서 의뢰인이 글을 올릴 때 전체 회사명이나 특정 정보가 그대로 노출되는 것을 원치 않는 경우가 있습니다. 이 경우 아래와 같은 코드를 사용하여 첫 몇 글자(아래에서는 3글자)만 표시되고 나머지는 ***로 대체할 수 있습니다.

$strim = mb_strimwidth($company, '0', '3', '***', 'utf-8');

또는 좀더 정교하게 하려면 다음과 같은 코드를 응용할 수 있습니다.

mb_substr($company,0,1).str_repeat('*',$len-2).mb_substr($company,-1,1);

이 코드를 적용하면 첫 글자와 마지막 글자만 표시되고 나머지는 글자 수에 따라 *로 대체됩니다. 글자 길이를 체크하여 글자 길이가 3자 이상일 때 적용하면 좋을 듯 합니다.

실전에서 대충 위와 비슷한 방식으로 앞의 몇 글자만 노출되도록 처리했습니다. 하지만 작업이 끝난 지 약간 시간이 지나 클라이언트로부터 연락이 와서 뒤의 몇 글자만 별표 처리해달라고 부탁하네요. 그래서 mb_substr을 사용하여 다음과 같이 하여 테스트해보았습니다.

$strim = mb_substr($company, '0', -3) . "***";

mb_strlen을 사용하여 글자 수 체크를 하여 일정 글자 길이 이상일 경우에만 코드가 적용되도록 하면 좋을 듯 합니다. 위의 코드가 문법적으로 정확한지 확실히 모르겠지만 작동은 잘 합니다. 혹시 문법적으로 올바르지 않다면 아래 댓글로 알려주시면 수정하도록 하겠습니다.

Replace-last-4-characters-with-asteriks-in-php

그림은 위의 코드를 조금 응용하여 워드프레스 게시판 플러그인인 KBoard에 적용한 경우입니다. 글 제목을 특정 길이 이상일 때 글자 수를 제한하고 끝 부분을 말줄임 기호(...)로 대체했습니다. 상황에 따라 다양하게 응용할 수 있을 것입니다.

참고: 만약 한글을 고려할 필요가 없이 영문이나 숫자에만 적용하는 경우에는 substr을 사용하면 됩니다.

substr($company, 0, -3) . "***";

위의 코드를 적절히 응용하시기 바랍니다(참고).


12개 댓글

  1. 이 글 Title에 맞는 질문은 아니지만, PHP 문자열 관련한 내용이라 질문 드립니다.

    프로그래밍 문의한 이구요 ㅜ.ㅜ

    $name = "길동 홍"을
    "홍길동"으로 출력하고 싶습니다.

    str_replace(), strrev() 등은 제가 원하는 것이 아닌 거 같네요...

    혹시 도움 주시면 감사 하겠습니다.

    1. 며칠 전에 조금 특별하게 처리해 달라는 요청을 받았는데요, 가령 "홍길동상사"라고 한다면 뒷 부분의 몇 글자만 OOO처럼 처리해 달라는 것이었습니다. 이 경우 "홍길OOO"처럼 말이죠.
      그리고 div 너비에 맞추기보다, 일부의 경우에는 의도적으로 제목이나 특정 정보를 일부만 보여주기를 원하는 경우가 있습니다. 그런 경우를 위한 것이라 생각하면 될 것 같습니다.

      1. 아... 그런경우라면 css 말고 js 로

        if(string.length > 5) {
        string = string.substring(0,5)+"...";
        }


        이렇게 간단하게 하는 방법도 있습니다. ^^

      2. 서버 속도/로딩속도 문제 때문에, front-end 에서는 css 로 처리가 가능하면 css 로 처리하는게 가장 좋고, css 로 처리가 안되면, js, 그리고 php 는 항상 마지막 선택이라고 생각하시면 좋습니다.

      3. 좋은 정보 감사합니다.

        위의 js 코드는 5자만 표시되고 나머지는 ...으로 처리되는 것 같네요.
        뒤의 3자리만 "..."으로 처리하는 것도 가능할까요? (예를 들어, 이 글의 제목이 "끝의 세 글자를 별표로 바꾸기"인데 웹에 표시될 때에는 "끝의 세 글자를 별표로 ..."처럼 끝의 3글자만 말줄임표나 다른 기호로 대체...)

        그리고 PHP로 처리할 경우에는 관리자에게는 정보를 모두 표시되도록 하고 일반인에게는 일부만 보여주는 것이 가능한데요, js의 경우에도 사용자 권한에 따라 처리가 가능할까요?

      4. string 숫자는 원하시는데로 바꾸시면 됩니다.

        "js의 경우에도 사용자 권한에 따라 처리가 가능할까요?"

        네 물론 가능하죠.

        if else 문은 php 뿐만아니라 모든 언어에 존재하니까요.

        if !관리자, (관리자가 아닌경우)

        ... 표시

        잘아시겠지만, 워드프레스는 is_admin() 함수가 있으니 매우 간단하죠.

      5. body tag 에 class 를 추가하셔서 어떻게 로직을 짜시려는지 잘 이해가 되지 않습니다.

        관리자인지 확인하는거는, 워드프레스 자체 함수를 사용하자면,

        current_user_can () 함수 (public 페이지)

        is_admin () 함수(관리자 페이지)

        가 있고, 다른 함수를 합쳐서 쓰는 방법도 있던데,

        이런식으로 (is_admin() && $current_user),...

        저는 자스로 무지 간단하게,

        var elementExists = document.getElementById("wpadminbar");

        이렇게 확인합니다. (관리자인 경우에만 wpadminbar 라는 element 가 존재할 수 있으니까요.)

        어떤 예제가 있는건 아니고 직접 if else 문을 짜셔야겠죠. 어떻게 짜더라도 정답이 있는건 아니니까요.

댓글 남기기

* 이메일 주소는 공개되지 않습니다.