데이터 저장을 위한 이상한 문자 인코딩, 이전 스크립트에서는 제대로 표시되지만 새 스크립트에서는 표시되지 않음
P粉141455512
P粉141455512 2024-01-10 16:51:57
0
2
345

오래된 웹사이트를 다시 작성하려고 합니다.

페르시아어이며 페르시아어/아랍어 문자를 사용합니다.

으아아아

거의 모든 테이블/열에는 COLLATE가 utf8_persian_ci

로 설정되어 있습니다.

새 스크립트에 codeigniter를 사용하고 있는데

으아아아

데이터베이스 설정에서는 문제 없습니다.

여기서 이상한 부분이 있습니다

이전 스크립트는 TUBADBENGINETUBA DB ENGINE라는 일종의 데이터베이스 엔진을 사용했습니다. 특별한 것은 없습니다.

기존 스크립트를 사용하여 데이터베이스에 일부 데이터(페르시아어)를 입력했을 때 데이터베이스를 살펴보니 해당 문자가 Ø1مران 으로 저장되어 있었습니다.

이전 스크립트는 데이터를 잘 가져오거나 표시하지만 새 스크립트는 데이터베이스와 동일한 이상한 글꼴/문자 집합을 사용하여 데이터를 표시합니다.

그래서 내가 입력할 때 rather 时,数据库存储的数据看起来像 Ø1مرا٠,当我在新脚本中获取它时,我会看到 Ø1Ù …را٠但在旧脚本中我看到?????

으아아아

반면에 ??? 데이터베이스에 직접 입력하면

물론 데이터베이스에 같은 내용을 저장했습니다 rather

새 스크립트가 매우 잘 표시됩니다

하지만 이전 스크립트에서는 ???

을 얻습니다.

이거 이해하실 분 계신가요?

대형 엔진입니다

https://github.com/maxxxir/mz-codeigniter-crud/blob/master/tuba.php

이전 스크립트 사용 예:

CREATE DATABASE `db` DEFAULT CHARACTER SET utf8 COLLATE utf8_persian_ci;
USE `db`;

P粉141455512
P粉141455512

모든 응답(2)
P粉295616170

deceze의 답변은 매우 훌륭하지만 수동으로 테스트하지 않고도 많은 수의 레코드를 처리하는 데 도움이 될 수 있는 몇 가지 정보를 추가할 수 있습니다.

컨텐츠를 CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8) 失败,则会打印 NULL 而不是 field_name 변환하면.

그래서 저는 다음을 사용하여 해당 기록을 찾았습니다.

으아악

또는 이:

으아악

UPDATE 이 절은 변환이 성공한 레코드에만 영향을 미칩니다.

으아악
P粉920835423

간단히 말하면, 이 질문은 이전에 수천 번 논의되었기 때문에:

  1. PHP는 "汉字",以 UTF-8 编码。该字节为 E6 BC A2 E5 AD 97와 같은 문자열을 저장합니다.
  2. 이 문자열은 latin1로 설정된 데이터베이스 연결을 통해 전송됩니다.
  3. 데이터베이스는 E6 BC A2 E5 AD 97,认为它们代表 latin1E6 BC A2 E5 AD 97 바이트를 수신하고 이 바이트가
  4. 문자를 나타낸다고 생각합니다.
  5. 데이터베이스 저장 문자
  6. æ¡ ¡ ¿ 리>
  7. 동일한 프로세스를 반대로 수행하면 PHP가 동일한 바이트를 수신한 다음 이를 UTF-8로 처리합니다. 데이터베이스가 문자를 제대로 처리하지 못하더라도 왕복은 PHP에서 잘 작동합니다.

그래서 여기서 문제는 데이터베이스에 데이터가 입력될 때 데이터베이스 연결이 올바르게 설정되지 않는다는 것입니다. 데이터베이스의 데이터를 올바른 문자로 변환해야 합니다. 이것을 시도해 보세요:

으아아아 utf8 不是您所需要的,请尝试一下。如果有效,请将其更改为 UPDATE아마도

utf8이 필요한 것이 아닐 수도 있습니다. 시도해 보십시오. 작동하는 경우 🎜UPDATE 문으로 변경하여 데이터를 영구적으로 업데이트하세요. 🎜
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!