php emoji mysql 오류는 데이터베이스가 이모티콘을 지원하지 않기 때문에 발생합니다. 해결 방법은 다음과 같습니다. 1. 문자 세트를 utfmb4로 변경합니다. 2. 호출 시 emoji 표현식을 이스케이프하고 다시 변환합니다.
이 문서의 운영 환경: Windows 7 시스템, PHP7.1 버전, Dell G3 컴퓨터
php emoji mysql 오류 문제를 해결하는 방법은 무엇입니까?
입니다. 소규모 프로그램을 만들 때 사용자에게 유용합니다. WeChat 이름과 같은 정보는 연습 기록의 참조로 데이터베이스에 저장되지만, WeChat 이름에 이모티콘 표현이 포함된 경우 해당 표현을 데이터베이스 필드에 저장할 수 없는 것으로 나타났습니다. 이전에 액세스 데이터베이스를 사용했을 때는 이모티콘을 필드에 직접 저장할 수 있었습니다.
원인 문제 해결:
우선: PHP 프로그램으로 인해 발생했는지 테스트했습니다. 게시글을 사용하여 이모티콘 표현이 포함된 콘텐츠를 제출했습니다. 제출된 콘텐츠는 정상이었고, 게시물의 내용에 이모진 표현이 포함되어 있었습니다.
다음: 이 데이터를 데이터베이스에 삽입해 보세요. 데이터베이스에 성공적으로 삽입한 후 표현식이 ? 기호로 변경된 것을 발견했습니다.
이 시점에서 문제는 기본적으로 이해되었습니다. 즉, 내 데이터베이스가 이 표현을 지원하지 않습니다.
주의! 알아채다! 참고: sql-front 도구를 이용하여 실행한 결과이지만, PHP 프로그램에서 실행하면 이모티콘 표현 뒤의 모든 내용이 정상적으로 저장되지 않을 수 있습니다. 예:
["Emoji" 제목]emoji 기호가 콘텐츠 시작 부분에 있고 삽입된 콘텐츠는 그대로 비어 있습니다.
[이전 "Emoji" 제목]삽입된 콘텐츠는 [앞],
이모티콘 표현과 이모티콘 뒤의 모든 내용을 정상적으로 삽입할 수 없습니다.
해결책:
방법 1: 인터넷을 확인해 보니 데이터베이스 문자 집합 인코딩을 변경하는 것이라고 합니다. 문자 집합을 utfmb4로 변경해 보세요. 다른 데이터 조각을 삽입하고 해당 표현식이 실제로 데이터베이스에 저장되어 있는지 확인하세요.
데이터베이스의 문자 집합이 변경되더라도 PHP 프로그램은 그에 따라 문자 집합을 변경해야 한다는 점에 유의해야 합니다. 그렇지 않으면 여전히???.
정의 방법은 다음과 같습니다: mysqli_query($conn,"SET NAMES UTF8MB4");
방법 2: 이모티콘 표현을 이스케이프 처리하고 호출 시 다시 변환합니다. 이는 이스케이프를 위한 함수와 이스케이프 방지를 위한 함수의 두 가지 함수를 정의하는 것 이상입니다. //emoji escape
function en_emoji($str){ $en_str=''; $length=mb_strlen($str,'utf-8'); for($i=0;$i=4){ $en_str.=''.rawurlencode($tmp_str).''; }else{ $en_str.=$tmp_str; } } return $en_str; } //反转义为emoji function de_emoji($str){ $de_str=preg_replace_callback('|(.*?)|',function($matches){ return rawurldecode($matches[1]); },$str); return $de_str; }
사용 방법도 매우 간단합니다. 데이터를 데이터베이스에 저장할 때 이스케이프하고, 읽고 표시할 때 역이스케이프합니다.
en_emoji($str) 이후의 결과는 다음과 같습니다.
읽고 표시할 때 de_emoji($str)를 사용하면 그게 전부입니다.
두 솔루션 비교:
방법 1: 데이터베이스뿐만 아니라 프로그램 코드까지 문자 집합을 수정합니다. 하지만 어떻게 표현하면, 향후 데이터베이스가 utf8mb4로 업그레이드될 수도 있습니다.
방법 2: 함수 방법을 사용하면 프로그램만 수정하면 되고 데이터베이스를 건드릴 필요가 없습니다. 두 가지 기능이 구현됩니다. 하지만 데이터베이스의 내용과 비교하면 일부 문자가 왜곡된 것처럼 느껴집니다. 그리고 이 글을 쓰면서 데이터를 저장할 때 en_emoji를 사용했기 때문에 모든 표현식이 이스케이프 코드가 된다는 사실을 발견했습니다. 내 기사에서 표현하고 싶은 것도 이스케이프 해제되었습니다. 위 결과의 성능을 대체하기 위해 그림만 사용할 수 있다는 것을 알 수 있습니다.
결론: 이모티콘을 적게 사용하세요. 물론, 데이터베이스도 직접 만들고 프로그램도 직접 작성한다면 1번 방법을 이용해 utf8mb4를 설정하는 것이 더 완벽합니다. 하지만 솔직히 이 글을 작성할 때만 이스케이프 기능을 사용했고, 불필요한 문제를 피하기 위해 글을 쓴 후에는 비활성화했습니다.
추천: "PHP 비디오 튜토리얼"
위 내용은 PHP 이모티콘 mysql 오류 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!