최근 몇 달간 위챗 개발을 많이 하고 있는데 위챗 닉네임 저장은 필수입니다
근데 이 망할 위챗은 이모티콘 표현을 닉네임으로 지원해서 좀 아쉽네요# 🎜🎜## 🎜🎜#일반적으로 MySQL 테이블을 디자인할 때는 UTF8 문자셋을 사용합니다. 이모티콘이 포함된 닉네임 필드를 삽입하면 전체 필드가 빈 문자열이 됩니다. 무슨 일이야?
Mysql의 utf8 문자 집합은 3바이트인데 비해 이모지는 4바이트이므로 닉네임 전체를 저장할 수 없는 것으로 나타났습니다. 무엇을 해야 할까요? 몇 가지 방법을 소개하겠습니다
1. utf8mb4 문자 집합을 사용하세요mysql 버전이 5.5.3 이상인 경우 UTF8이 가능하다고 확신합니다. utf8mb4 문자 세트로 직접 업그레이드
이 4바이트 utf8 인코딩은 기존 3바이트 utf8 문자 세트와 완벽하게 호환되며 이모티콘 표현을 직접 저장할 수 있어 최고의 솔루션입니다. 솔루션
바이트 증가로 인한 성능 손실은 몇몇 리뷰를 읽어보니 거의 무시할 정도입니다
2 base64 인코딩을 사용하세요# 🎜🎜##🎜🎜. #어떤 이유로든 utf8mb4를 사용할 수 없는 경우 base64를 사용하여 국가를 저장할 수도 있습니다base64_encode와 같은 기능을 사용하여 이모티콘을 인코딩하면 데이터 테이블에 직접 저장됩니다. utf8 바이트 세트를 사용하고 꺼낼 때 디코딩하면 됩니다.
3. 이모티콘 표현을 제거하세요emoji 표현은 귀찮은 점은 보관할 수 있어도 완벽하게 표시되지 않을 수 있다는 점입니다. PC, Android 등 iOS 이외의 플랫폼에서. 이모티콘을 표시해야 한다면 많은 이모티콘 이미지를 준비하고 타사 프런트엔드 라이브러리를 사용해야 합니다. 그럼에도 불구하고 이모티콘 이미지가 충분히 완성되지 않아 이모티콘 이미지를 표시할 수 없는 상황이 여전히 발생할 수 있습니다. 대부분의 비즈니스 시나리오에서는 이모티콘이 필요하지 않습니다. 적절하게 제거하는 것을 고려하고 다양한 비용을 절감할 수 있습니다
많은 구글링 끝에 마침내 신뢰할 수 있고 사용 가능한 코드를 찾았습니다:
// 过滤掉emoji表情 function filterEmoji($str) { $str = preg_replace_callback( '/./u', function (array $match) { return strlen($match[0]) >= 4 ? '' : $match[0]; }, $str); return $str; }
기본 아이디어는 다음과 같습니다. traverse 문자열의 각 문자에 대해 문자 길이가 4바이트이면 제거됩니다.
위 내용은 PHP 개발에서 이모티콘 표현과 관련된 여러 처리 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!