[펌] http://seongtak-yoon.tistory.com/19
MySQL 5.0과 같이 저버전을 사용하게되면, 요즘 스마트폰에 기본으로 적용된 Emoji 문자때문에 골치 아픈 경우가 많습니다.
MySQL은 기본적으로 UTF-8이 3Byte까지만 지원하기때문에 4Byte로 구성된 Emoji와 같은 문자가 저장되면 빈 값으로 저장되거나 ?? 등으로 저장됩니다.
이를 방지하기 위해서 (정확이는 utf8mb4 타입을 적용하기 전까지 임시방편으로 ..) 저장되지 않도록 애플리케이션단에서 제거할 필요가 있습니다.
# planes 1-3
# planes 4-15
# plane 16
preg_replace("/\xF0[\x90-\xBF][\x80-\xBF]{2} | [\xF1-\xF3][\x80-\xBF]{3} | \xF4[\x80-\x8F][\x80-\xBF]{2}/", "", $string);
참고된 테이블 구성 그대로 정규식으로 조합하여 4Byte UTF-8 문자를 찾아내어 ""(빈값)으로 replace합니다.
4Byte UTF-8의 first Byte는 F0~F4로 구성되어 있습니다.
- http://docs.oracle.com/cd/E24693_01/server.11203/e10729/appunicode.htm#CACHBDGH 여기를 참고해보시면
- 이 정보는 1~3Byte와 중복되지 않는 값으로 일종의 Key값(?)으로 생각하면 될것 같네요.
💞💞허허허💞💞 -> 허허허가 됩니다.
⛄허허 -> ⛄허허가 됩니다.
이 문자는 3Byte로 구성된 UTF-8로 없어지지 않는 것이 맞고, 저버전 MySQL도 문제없이 처리가능합니다.
- http://apps.timwhitlock.info/unicode/inspect?s=%E2%9B%84
참고 사이트
- 특정 문자 구성내용 보기
http://apps.timwhitlock.info/unicode/inspect?s=%F0%9F%92%9E
- UTF-8 구성표
http://www.utf8-chartable.de/unicode-utf8-table.pl
- 도움되는 사이트.
http://stackoverflow.com/questions/16496554/can-php-detect-4-byte-encoded-utf8-chars
- getEmoji
http://getemoji.com/
'프로그래밍 > PHP' 카테고리의 다른 글
php 서버 바로 띄우기. (0) | 2020.06.03 |
---|---|
세션 관리. session id 가 계속 갱신되는 문제. (0) | 2016.03.10 |
[error] date_default_timezone_set() (0) | 2012.12.11 |
short_open_tag 설정. (0) | 2012.08.07 |
파일 업로드. (0) | 2012.07.11 |