얼마전 getSummary에서 공백 압축이 되지 않는 문제를 토로한 적이 있었는데요. https://xetown.com/276260

 

이번에는 꽤나 큰 자리를 차지하는 이상한 탭이 섞여 나와서 공백 처리가 안 되더라구요.

기진곰님이 알려주신 bin2hex()로 확인해보니, 그냥 탭은 아니고 e38080 으로 나왔어요.

뒤져보니까 태두(抬頭)라는 신기한 공백 문자네요ㄷㄷㄷ 세상은 넓어요~~~

(관련 정보: https://ko.wikipedia.org/wiki/%ED%83%9C%EB%91%90 )

 

php.net에서 보니 mb_convert_kana()라는 함수로 제어가 가능한 것 같기는 한데, 이건 일본어인 경우에만 해당하는 것 같고...

중국 쪽에서는 이런 경우, hex2bin(str_replace("e38080","",bin2hex($document->getSummary(200)))) 으로 변환, 재변환해서 제거하더군요.

 

회원들이 여기저기서 긁어다가 복붙 하다보니 이런 경우들이 생깁니다.

일단 요놈도 일전에 잡아놨던 c2a0와 함께

{preg_replace("/\s+/", " ", hex2bin(str_replace(array("c2a0", "e38080"), "20", bin2hex($document->getSummary(200)))))} 으로 처리를 하긴 했습니다.

 

근데 이건 누가 봐도 점점 안드로메다로 가는 느낌입니다;;;

공백 처리해야 할 유니코드 문자가 더 이상은 안 생기면 좋겠어요.

하지만 이것도 웹마의 숙명이라면 숙명이겠죠? ㅠㅠ

윤삼

profile
아무래도 중급 초반 수준의 코딩 오타쿠인 것 같습니다.
  • profile

    라이믹스의 utf8_normalize_spaces 함수를 참고해서 한꺼번에 처리해 버리세요.

    (common/functions.php 참고)

  • profile profile
    앗, 역시 라이믹스! 일신의 문제가 정리되고 나면, 서버 환경도 바꾸고 반드시 라이믹스로 갈아타도록 하겠습니다!
  • profile
    수정한 거 나중에 까먹을까봐, 기록 삼아 댓글 남깁니다.
    기진곰님 조언으로 다음과 같이 처리했어요. :)

    document.item.php에서

    $content = preg_replace('/ ( +)/is', ' ', $content);
    이 부분을 주석 처리 또는 삭제하고 그 대신,
    (사실 그냥 내버려둬도 무방합니다)

    /**
    * This function replaces all whitespace characters with a single regular space (0x20).
    * Unicode whitespace characters are also replaced.
    */
    $content = preg_replace(array('/((?!\x0A)[\pZ\pC])+/u', '/[\pZ\pC]+/u'), ' ', $content);
    /**
    * This function trims all space from the beginning and end of a string.
    * Unicode whitespace characters are also trimmed.
    */
    $content = preg_replace('/^[\s\pZ\pC]+|[\s\pZ\pC]+$/u', '', $content);

    ... 을 넣었더니 깔끔하게 잘 구현됩니다. 스킨 파일에서 getSummary() 부분은 원래대로 복원했구요 ㅎㅎ
    코어 수정이 껄끄러운 경우엔 해당 소스를 스킨 파일에서 응용하면 되겠습니다.