게시판 리스트에서 본문 요약을 불러오곤 하는데, 본문에 <p>&nbsp;</p>가 연달아 있거나 하면 요약문에도 빈 칸이 <p>&nbsp;</p>의 숫자만큼 반영되고 있습니다.

 

그래서 str_replace("  ", " ", $document->getSummary(200)) 등을 해봤는데, 그래도 공백이 전혀 압축되지를 않아요.

 

document.item.php를 건드려봐도 영 반응이 없구요;;;

 

혹시 방법 없을까요? 리스트에 출력된 요약문 보기가 좀 많이 흉해요ㅠㅠ

  • profile

    str_replace("&nbsp;", " ", $document->getSummary(200)) 해보셨나요?

  • profile profile
    &nbsp;를 공백으로 하는 건 document.item.php에서 이미 처리가 됐길래 안해본 거 같아요;;
    말씀하신 거에 str_replace를 한번 더 해보라는 말씀이시죠?
    이따 집에 도착하면 한번 시도해보겠습니다!
  • profile profile

    {str_replace("  ", " ", str_replace("&nbsp;", " ", $document->getSummary(200)))}로 했는데도 역시 안 돼요ㅠㅠ
    심지어 {str_replace("  ", " ", str_replace("  ", " ", $document->getSummary(200)))}으로도 해봤는데요, 모든 공백이 사라짐에도 불구하고 문제가 되는 두 칸 짜리 공백은 계속 한 칸으로 남아 있습니다ㅠㅠ

  • profile profile

    결국엔 이걸로 성공했습니다.
    {preg_replace("/\s+/", " ", str_replace(" ", "", $document->getSummary(200)))}

    근데 기진곰님, 이상한 게 있어요. 그냥 보기에도 위의 구문은 많이 이상하죠?
    사실, str_replace(" ", "", $document->getSummary(200)) 에서요, 따옴표 사이에 있는 애(" ")가 좀 많이 이상합니다.
    정체를 알 수가 없는데, 암튼 그냥 공백이 아니에요!
    (지금 여기 에디터에 이 녀석이 제대로 복붙 되는지 모르겠어요.)

    처음엔 이것 저것 해보다가, str_replace(" ", "&nbsp;", $document->getSummary(200)) 이렇게 해봤었거든요.
    (이번 따옴표 사이에 있는 건 그냥 스페이스입니다.)
    그리고 소스보기를 해봤더니 이런 식으로 나오더라구요.

    기진곰은&nbsp;정말&nbsp;멋쟁이에요.&nbsp; &nbsp; &nbsp;정말이에...

    &nbsp; 사이에 요상한 칸이 생긴 거죠.
    뭔가 이상하다 싶어서 str_replace("&nbsp; &nbsp;", " ", str_replace(" ", "&nbsp;", $document->getSummary(200))) 이렇게 타이핑을 해봤어요.
    그냥 타이핑을 한 거니까 &nbsp; &nbsp; 사이는 스페이스 바 한 칸인 거죠.
    어쨌거나 여전히 출력문은, 기진곰은&nbsp;정말&nbsp;멋쟁이에요.&nbsp; &nbsp; &nbsp;정말이에... 으로 나오는 겁니다.

    그러니까 따옴표 사이에 있던 애(" ")가 그냥 스페이스가 아니었던 거예요.
    코딩할 때 저는 보통 노트패드2를 쓰는데, 거기서도 그렇고 메모장에서도 그렇고 인식하지 못하는 뭔가 이상한 문자였던 게 아닐까요?

    암튼 그래서 이 녀석을 긁어다가 {preg_replace("/\s+/", " ", str_replace(" ", "", $document->getSummary(200)))}로 (1)일단 요상한 녀석을 없애주고 (2)공백문자가 중복되는 부분들을 한 칸으로 압축했더니, 요약문이 제대로 출력된 겁니다.

    아마도 문제의 비밀은 content에서 <p>&nbsp;</p> 자리에 있지 않나 싶어요.
    구체적으로 그게 뭔진 잘 모르겠지만요;;;
    혹시 어떻게 된 사정인지 알 수 있을까요?

  • profile profile
    공백 문자 종류가 한두 가지가 아니예요.
    https://en.wikipedia.org/wiki/Whitespace_character#Unicode

    아마 이 중에 하나였을 거예요. 그냥 스페이스를 찾아서 치환하라고 하니까 못 찾고, 정규식으로 공백 다 찾으라고 하니까 그제서야 찾을 수 있는... 아마 해당 문자열을 bin2hex() 해보면 16진수로 어떤 코드인지 정확히 알 수 있겠죠. 평범한 스페이스는 20입니다.
  • profile profile
    답변 감사합니다.
    말씀하신대로 bin2hex로 해보니 c2a0라고 나오더군요. U+00A0면 그냥 &nbsp; 아닌가요?
    그치만 str_replace("&nbsp;", " ", $변수)로도 안 잡혔던 걸 보면, 다른 종류의 no-break space 같기도 하고 그러네요ㅎㅎ

    검색 결과, {preg_replace("/\s+/", " ", str_replace("\xc2\xa0", " ", $document->getSummary(200)))} 이 가장 간결한 해법인 것 같아서 적용했습니다.
    도움 감사합니다~!