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

Last Updated: 2016년 08월 02일 | | 12개 댓글

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 개 댓글

Leave a Comment

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

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

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

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

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

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

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

      • 좋은 정보 감사합니다.

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

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

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

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

        네 물론 가능하죠.

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

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

        ... 표시

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

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

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

        current_user_can () 함수 (public 페이지)

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

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

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

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

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

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

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