개발! 딱 깔끔하고 센스있게!

PHP:mbustrtouppper가 일을 하지 않습니다. 본문

개발 스크랩 메모/PHP

PHP:mbustrtouppper가 일을 하지 않습니다.

렉사이 2020. 12. 26. 22:36

UTF-8과 mb-strtoupper 에 문제가 있습니다.

mb_internal_encoding('UTF-8'); $guesstitlestring='Le Courrier de Sáint-Hyácinthe'; $encoding=mb_detect_encoding($guesstitlestring); if ($encoding!=='UTF-8') $guesstitlestring=mb_convert_encoding($guesstitlestring,'UTF-8',$encoding); echo "DEBUG1 $guesstitlestring\n"; $guesstitlestring=mb_strtoupper($guesstitlestring); echo "DEBUG2 $guesstitlestring\n"; 

결과:

DEBUG1 Le Courrier de Sáint-Hyácinthe DEBUG2 LE COURRIER DE S?INT-HY?CINTHE 

왜 이러는지 모르겠어?나는 가능한 한 인코딩을 조심해야 한다.

이 문자열은 우선 UTF-8으로 주어져 검증을 거쳐 UTF-8로 다시 바꿀 수 있다.

정말 악몽이다!

업데이트

그래서 내가 콘솔을 통해 인자를 입력하고 콘솔에서 되돌아온 인자가 공동으로 발생한 것을 발견했다.

그래서 그들은 드나드는 길에 엉망진창이다.

해결 방법은 이러한 방식으로 어떤 인자를 입력하지 말고 이런 식으로 출력 인자를 입력하지 마라.

여러분 이 문제 해결해 주셔서 감사합니다!

대답

strtoupper() / mbu strtoupper()를 사용하지 말고 mbu convertu case(), 다른 인코딩 사이의 대문자가 복잡하기 때문에 UTF-8이 확실합니다.

$content = 'Le Courrier de Sáint-Hyácinthe'; mb_internal_encoding('UTF-8'); if(!mb_check_encoding($content, 'UTF-8') OR !($content === mb_convert_encoding(mb_convert_encoding($content, 'UTF-32', 'UTF-8' ), 'UTF-8', 'UTF-32'))) { $content = mb_convert_encoding($content, 'UTF-8'); } // LE COURRIER DE SÁINT-HYÁCINTHE echo mb_convert_case($content, MB_CASE_UPPER, "UTF-8"); 

작업 예시: http:/3v4l.org/enefm35 v443

또 PHP 사이트에서 변환기에 대한 댓글: http:/www.PHP.net/manual/function.utf8 encode.PHP

Comments