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을 사용하여 글자 수 체크를 하여 일정 글자 길이 이상일 경우에만 코드가 적용되도록 하면 좋을 듯 합니다. 위의 코드가 문법적으로 정확한지 확실히 모르겠지만 작동은 잘 합니다. 혹시 문법적으로 올바르지 않다면 아래 댓글로 알려주시면 수정하도록 하겠습니다.
그림은 위의 코드를 조금 응용하여 워드프레스 게시판 플러그인인 KBoard에 적용한 경우입니다. 글 제목을 특정 길이 이상일 때 글자 수를 제한하고 끝 부분을 말줄임 기호(...)로 대체했습니다. 상황에 따라 다양하게 응용할 수 있을 것입니다.
substr을 사용하면 됩니다.
만약 한글을 고려할 필요가 없이 영문이나 숫자에만 적용하는 경우에는substr($company, 0, -3) . "***";
위의 코드를 적절히 응용하시기 바랍니다(참고).
이 글 Title에 맞는 질문은 아니지만, PHP 문자열 관련한 내용이라 질문 드립니다.
프로그래밍 문의한 이구요 ㅜ.ㅜ
$name = "길동 홍"을
"홍길동"으로 출력하고 싶습니다.
str_replace(), strrev() 등은 제가 원하는 것이 아닌 거 같네요...
혹시 도움 주시면 감사 하겠습니다.
안녕하세요?
저도 PHP에 대해 문외한이라... 정확한 답변이 될지는 모르겠습니다.
explode() 함수를 사용하여 배열(array)로 만든 다음 순서를 바꾸어서 출력하면 될 것 같습니다.
다음 두 글을 참고해보세요.
https://stackoverflow.com/questions/16257063/explode-to-array-and-print-each-element-as-list-item
https://www.w3schools.com/PHP/func_string_explode.asp
php 안쓰고 간단하게 css 로 text-overflow: ellipsis; 적용만 하셔도 됩니다. ㅎㅎㅎ
https://developer.mozilla.org/en-US/docs/Web/CSS/text-overflow
http://www.w3schools.com/cssref/tryit.asp?filename=trycss3_text-overflow
며칠 전에 조금 특별하게 처리해 달라는 요청을 받았는데요, 가령 "홍길동상사"라고 한다면 뒷 부분의 몇 글자만 OOO처럼 처리해 달라는 것이었습니다. 이 경우 "홍길OOO"처럼 말이죠.
그리고 div 너비에 맞추기보다, 일부의 경우에는 의도적으로 제목이나 특정 정보를 일부만 보여주기를 원하는 경우가 있습니다. 그런 경우를 위한 것이라 생각하면 될 것 같습니다.
아... 그런경우라면 css 말고 js 로
if(string.length > 5) {
string = string.substring(0,5)+"...";
}
이렇게 간단하게 하는 방법도 있습니다. ^^
저는 계속 PHP로 처리하는 것만 생각했는데, JS로 하면 더 간단해지네요.ㅎㅎ
서버 속도/로딩속도 문제 때문에, front-end 에서는 css 로 처리가 가능하면 css 로 처리하는게 가장 좋고, css 로 처리가 안되면, js, 그리고 php 는 항상 마지막 선택이라고 생각하시면 좋습니다.
좋은 정보 감사합니다.
위의 js 코드는 5자만 표시되고 나머지는 ...으로 처리되는 것 같네요.
뒤의 3자리만 "..."으로 처리하는 것도 가능할까요? (예를 들어, 이 글의 제목이 "끝의 세 글자를 별표로 바꾸기"인데 웹에 표시될 때에는 "끝의 세 글자를 별표로 ..."처럼 끝의 3글자만 말줄임표나 다른 기호로 대체...)
그리고 PHP로 처리할 경우에는 관리자에게는 정보를 모두 표시되도록 하고 일반인에게는 일부만 보여주는 것이 가능한데요, js의 경우에도 사용자 권한에 따라 처리가 가능할까요?
string 숫자는 원하시는데로 바꾸시면 됩니다.
"js의 경우에도 사용자 권한에 따라 처리가 가능할까요?"
네 물론 가능하죠.
if else 문은 php 뿐만아니라 모든 언어에 존재하니까요.
if !관리자, (관리자가 아닌경우)
... 표시
잘아시겠지만, 워드프레스는 is_admin() 함수가 있으니 매우 간단하죠.
워드프레스에서 js를 사용하여 관리자가 인지 여부를 체크하는 condition 문을 인터넷에 검색해보니 검색이 잘 안 되네요.
그리고 body에 user role을 class로 추가하는 방법은 어떨지 모르겠네요(http://code.tutsplus.com/tutorials/adding-to-the-body-class-in-wordpress--cms-21077 ).
body tag 에 class 를 추가하셔서 어떻게 로직을 짜시려는지 잘 이해가 되지 않습니다.
관리자인지 확인하는거는, 워드프레스 자체 함수를 사용하자면,
current_user_can () 함수 (public 페이지)
is_admin () 함수(관리자 페이지)
가 있고, 다른 함수를 합쳐서 쓰는 방법도 있던데,
이런식으로 (is_admin() && $current_user),...
저는 자스로 무지 간단하게,
var elementExists = document.getElementById("wpadminbar");
이렇게 확인합니다. (관리자인 경우에만 wpadminbar 라는 element 가 존재할 수 있으니까요.)
어떤 예제가 있는건 아니고 직접 if else 문을 짜셔야겠죠. 어떻게 짜더라도 정답이 있는건 아니니까요.
감사합니다~