이모지 제거 라이브러리의 한계가 드러나고 말았다.
이모지...................................
저번 포스팅을 보면 알 수 있듯이 기존의 방법은,
이모지를 바이트 크기로 1차 걸러냄 > 이모지 라이브러리를 통해 2차로 파싱함
이였다.
하지만, 2차에 걸친 이모지 필터링에도 또 허점이 드러나고 말았는데,
이모지 라이브러리의 한계
1) 최근 버전의 라이브러리라고 할지라도, 이모지가 새로 생겨나는 속도를 따라가지 못함
2) 이모지의 확장으로 인한 폭 없는 접합자(zero width joiner, ZWJ)/ 변형 선택기(variation selectors)의 등장
>이모지를 DB에 저장할 때와 쿼리로 조회할 때 값이 계속 달라지고, 앞에 물음표가 붙는 경우가 생겨
정상적으로 조회가 되지 않았는데, 눈에 보이지는 않지만 분명 존재하는 이 녀석들의 영향이였다.
라이브러리에서는 이들을 파싱해주지 않는다. 깨진 상태로 저장한다.
이모지의 확장
🤼♀️ (레슬링하는 여자) 이모지는 = 🤼 (레슬링하는 사람) + ♀️ (여성 기호) 로 이루어진다.
🤼♂ (레슬링하는 남자) 이모지는 = 🤼 (레슬링하는 사람) + ♂ (남성 기호) 로 이루어진다.
이 때 사용되는 것이 폭 없는 접합자(zero width joiner, ZWJ)와 변형 선택기(variation selectors)이다.
1. Zero Width Joiner / 폭 없는 접합자(제로 너비 결합자)
-ZWJ (zero-width joiner)는 두 개 이상의 문자를 결합하여 새 문자 또는 이모티콘을 형성 할 수있는 유니 코드 문자-유니 코드 코드 포인트는 U+200D
-새 이모지를 만드는 데 사용할 수 있지만 이모지 자체는 아님-단독으로 사용하면 보이지 않음
2. 변형 선택기 (variation selectors)
-이전 문자가 이모티콘 스타일로 표시되도록 지정하는 유니 코드 문자
-기본적으로 이전 문자가 텍스트 스타일로 표시되는 경우에만 필요
-유니 코드 코드 포인트는 U+FE0F
-항상 다른 이모 지 다음에 사용-단독으로 사용하면 보이지 않음
-기본적으로 텍스트 (흑백)로 표시됩니다.
이들에 숨어있는 함정은,
호환성이 좋은 일부 플랫폼에서는 🤼♂ 단일 이모티콘으로 표시되지만
호환성이 좋지 않은 일부 플랫폼에서는 🤼♂ 와 같이 여러 개의 이모티콘이 함께 표시 될 수도 있다는 것이다.
이모지 데이터 조회에 문제가 있다면, 이들을 의심해봐야 한다.
해결방법
이모지 라이브러리를 통하여 이모지를 파싱하더라도 필터링 되지 않는 이모지가 존재할 때,
또는 라이브러리를 써서 저장한 값 뒤에 깨지는 문자가 숨어있는 것 같을 때,
ZWJ와 변형 선택기의 유니코드를 통해 제거한다. 현재는 깔끔하게 조회가 되는 상태
참고하면 좋은 이모지 사전
이모지 라이브러리 사용기
https://yenbook.tistory.com/69
댓글