개발 Q&A

제목 문자열 치환 질문 드립니다. 꾸벅~~~^^
글쓴이 꾸숑 작성시각 2013/05/25 02:38:06
댓글 : 11 추천 : 0 스크랩 : 0 조회수 : 16433   RSS
참고로 글 내용중 욕이 보이더라도 욕이라 생각말아 주세요^^

쪽지 에서 욕 필터링 작업 하고 있습니다.
현재 작업 내용은 본문($contents)내용중 욕($data['limit_word']) 배열과 일치하는 문자가 있으면
해당 문자가 *** 로 치환됩니다.

사용하다보니 조금더 욕심이 생기네요..
현재는  욕이 2자이든 3자이든 *이 3개로 치환되는데

제가 해보고자하는것은
두자욕은 ** 세자욕은 ***

또는 두자욕은 바* 세자욕은 개새*
이런 형태로 만들어 보고자 합니다.

나름 잔머리 사용해서 이런 저런 함수를 대입해서 해보았으나 능력 부족으로 질문 드립니다.
아래는 현재 까지 작업된 소스 입니다.

  $data= $this->memo_model->memo_admin();
  $contents = $this->input->post('memo_contents', TRUE);

  $limit_word  = $data['limit_word'];
  $word  = explode ("|", $limit_word );
  $memo_contents = str_replace($word,'***',$contents);

   $data=$this->input->post(NULL, TRUE);
   $data['memo_contents']=$memo_contents;

   $this->db->insert($this->id,$data);

밤샘 작업해서 끝장을 내고 싶은데 낮 일정으로 그만 컴 OFF해야 할것 같습니다.
참고로 월요일 까지는 답글 못할것 같습니다.

토요일 일요일 전국체육축전 페러글라이딩 경기도 대표 선수로 출전 합니다.
금메달 따면 메달 팔아서 포럼전체 회식 제가 쏘겠습니다.^^
단 답글 다신분들만요 ㅎㅎ

행복한 주말과 휴일 되세요~~~~~
태그 문자열치환,문자,치환,문자치환
 다음글 브라우저 뒤로가기 버튼.... (1)
 이전글 혹시 오라클 DB에 접속해보신분 계시나요~? (1)

댓글

/ 2013/05/25 18:43:26 / 추천 0

switch (strlen($word)){
 case  2:
  echo substr($word,0,1).'*';
 break;
 case 3:
  echo substr($word,0,2).'*';
 break;
 default :
  echo substr($word,0,strlen($word)-1).'*';
 break;
}

일단 2글자와 3글자의 경우 처리 하는 것을 올려뒀고

혹시 몰라 마지막 글자를 *으로 치환하는 것을 디폴트로 처리하여 올려뒀습니다.

다만 substr의 경우 한글을 정확하게 잘라내지 못하는 문제가 있으니

한글 잘라내는 함수를 별도로 찾아보심이 좋을 듯 합니다.

(이부분은 구글에 검색하면 많이 나오지 따로 설명을 드리지는 않겠습니다;)



페러글라이딩 멋지네요

저도 한번 해보고 싶었는데

꼭 금메달 따세요 ㅎㅎ

한대승(불의회상) / 2013/05/25 21:41:06 / 추천 0
아싸!!!! 금메달을 기원 합니다. ^^
배강민 / 2013/05/26 21:46:00 / 추천 0
헙 페러글라이딩... 멋지네요
꾸숑 / 2013/05/27 01:02:11 / 추천 0

 키//
답변 감사합니다.
안내해주신  substr을 이미 적용시도 해보았는데
해당 소스에 적용방법을 찾지 못해서 질문 한것인데요..
조금 연구하면 적용방법을 찾을수 있을것 같네요...
이렇때 머리 좋아지는 약을 먹고 싶네요 ㅋ

불의 회상//
죄송합니다. 3등했어요...

배강민//
언제든 페러글라이딩의 세계에 오시는걸 환영합니다.
 

/ 2013/05/27 09:30:09 / 추천 0
 
  $memo_contents = str_replace($word,'***',$contents);

이부분만

 
  $memo_contents = str_replace($word,substr($word,0,strlen($word)-1).'*',$contents);
이런식으로 바꾸면 되겠네요 ㅎㅎ



3등이라니 그래도 대단하시네요 ㄷㄷ

회식이 날아간건 좀 아쉽지만;
꾸숑 / 2013/05/27 13:57:17 / 추천 0
키//
$word 의 값이 문자열이 아니라 욕의 배열이라서 조금더 생각할 부분이 있는것 같네요...

감사의 마음으로 동영상을 만들어 봤습니다.
www.youtube.com/embed/l3Hl3Q9BMtg
꾸숑 / 2013/06/01 16:41:17 / 추천 0

해결 내용을 게시 합니다. 좀 복잡하네요

<?
$memo_contents = "병신 안녕하세요 씨발놈 반가워요 ***";
$limit_word = "병신|***|씨발놈";
$word = explode("|", $limit_word);

for($i = 0; $i < count($word); $i++) {
 if( @strpos($memo_contents, $word[$i]) > -1) {
  $memo_contents = str_replace($word[$i], str_repeat("*", mb_strlen($word[$i],"utf8")), $memo_contents);
 }
}
echo $memo_contents;

?>

/ 2013/06/01 18:07:00 / 추천 0
꾸숑 //

앗 리플을 이제서야 봤네요

배열문제는 지금처럼 하시면 될 것 같아요 


어제 정모는 재밌으셨나요?

야근만 아니였으면 갔을텐데 안타깝네요 ㅠㅠ


영상 진짜 재밋어 보이는데

저거 우승의 기준은 누가 더 정확한 지점에 착지하느냐 인가요?

언제 저런거로 정모를 한번 가는 것도 괜찮을 듯 ? ㅎㅎㅎㅎ



아 그리고 소스 보다가 문득 재밌는게 생각나서 저도 응용작 하나 올리고 갑니다 ㅎㅎㅎ

옛날에 온라인게임에서 이런걸 본 것 같네요 ㅎㅎ

(예제에 욕설이 들어가다보니 좀 그렇네요 ;;)

$memo_contents = "병신 안녕하세요 씨발놈 반가워요 ***";
$word=array(
"병신" => "아픈사람",
"씨발놈"=>"나쁜사람",
"***"=>"강아지" 
);


foreach($word as $key => $value){
 if( @strpos($memo_contents, $key) > -1) {
  $memo_contents = str_replace($key, $value, $memo_contents);
 }
}
echo $memo_contents;
 


 
꾸숑 / 2013/06/02 12:13:00 / 추천 0
키//
네 정모 잼 났어요....
나중에 어떤 분과 나이트까지 갔었네요 ㅋ

페러글라이딩은 정밀착륙대회와 크로스컨트리가 잇어요...

저도 리니지에서 영감을 얻어서 욕을 ***로 처리하는걸 생각했네요 ㅎㅎㅎ

욕은 지송해요... 이해 바래요^^

응용작 감사해요.. ^^
생각하면 할수록 끝이 없는 php의 세계이네요...
어제도 움파님과 대화중 많은것을 배웠네요 ㅎㅎ
한대승(불의회상) / 2013/06/03 10:58:38 / 추천 0
꾸숑// 이상한곳에 후기 올리시고...
암튼 나이트까지 가셨다니 1차만 하고 후다닥 내려간 저의 입장에선 참 부럽네요.
써놓고 보니 정식 후기에 올리긴 좀 뭐한 이야기 이긴하네요 ㅎㅎㅎ
꾸숑 / 2013/06/03 16:17:43 / 추천 0
불의회상//
저번 모임보다 훨신 밝고 맑은 불상님을 뵈어서 좋았어요^^
역시 사람은 두발로 걸어야 합니다. ㅎㅎ