머리말:
솔직히 말하면,
샌들도 UTF8이 좋다고 생각하는데...
결국, 중국, 일본, 한국을 같은 화면에서 보여주는 것은 동아시아인에게 매우 매력적입니다...
(물론 혜택은 이것에만 국한되지 않습니다...)
웹 프로그램뿐만 아니라…
많은 응용 프로그램의 커널이 유니코드 인코딩을 사용하기 시작했습니다...
목적은 분명합니다. 다중 언어 디스플레이를 지원합니다...
모든 Microsoft 소프트웨어는 유니코드 기반입니다...
따라서 일본어 소프트웨어는 중국어 XP에서 정상적으로 표시될 수 있습니다.
그리고 중국어 98은 GB 커널에 다른 언어 소프트웨어를 설치할 때 문자가 깨질 수 있습니다...
UTF8의 경우,
유니코드의 한 갈래라고 할 수 있습니다.
한자를 저장하는데 3바이트를 사용하는데...
(유니코드는 4바이트를 사용합니다.)
응용프로그램 소프트웨어가 유니코드로 집합적으로 변형되었습니다...
웹 애플리케이션에서 UTF8을 사용할 수 없나요?
이 기사에서 Sandals는 가능한 한 많은 측면에서 UTF8 인코딩을 사용하는 PHP 프로그래밍을 소개하려고 합니다.
"중국어"를 따로 소개하는 이유는...
첫째, 영어의 경우 UTF8을 고려할 필요가 전혀 없기 때문입니다…
다국어 시스템을 구축할 계획이 없다면...
(불평을 하나 드리고 싶습니다. 요즘 외국인들은 프로그램을 작성할 때 이 문제에 전혀 관심을 두지 않습니다...)
둘째, UTF8 인코딩을 적용한 중국, 일본, 한국 등 멀티바이트 언어의 처리 방식은 실제로 매우 유사하다...
조롱박을 따라가며 국자를 그려보세요...
좋아요... 데이터베이스 처리 부분부터 시작하겠습니다...
==========================================
데이터베이스에 연결
많은 사람들이 MySQL 4.1로 업그레이드하면 데이터가 엉망이라는 것을 알게 될 것입니다...
사실 MySQL은 4.1부터 문자셋을 지원하기 때문인데...
기본 문자셋은 UTF8인데...
(국제표준과의 통합이 얼마나 중요한지 완전 입증... 헤헤...)
예전에는 utf8이나 GBK 인코딩을 주로 사용했는데...
물론 출력 데이터는 왜곡되어 있습니다 ...
잘못된 코드를 해결하려면...
어떤 인코딩 데이터를 얻을 것인지 프로그램에 알려야 합니다...
이전 데이터베이스가 utf8로 인코딩되었다고 가정합니다...
쿼리 앞에
mysql_query('SET CHARACTER SET utf8') 또는 die("Query failed : " . mysql_error());
를 추가할 수 있습니다.
물론 이는 4.1 이상에서만 필요하기 때문에,
그러므로 우리는 판단을 추가할 수 있습니다:
$mysqlversion = $db->query_first("SELECT VERSION() AS version");
if ($mysqlversion['version'] >= '4.1')
{
mysql_query('SET CHARACTER SET utf8') 또는 die("쿼리 실패: " . mysql_error());
}
이렇게 하면 MySQL의 기본 인코딩이 무엇이든 상관없이 정상적으로 접근이 가능합니다...
(생존기간 동안 입금하든, 일정기간 입금하든, 소액 출금하든 상관없습니다...)
하지만 다들 국제적입니다...
아직도 utf8을 사용하시나요?
어떻게 트랜스코딩하나요?
게다가……
데이터 업그레이드 중에 잘못된 문자가 나타나면 어떻게 해야 합니까?
샐러드!
다음에 고장 내용을 들어보자…
========================================= === =
데이터를 4.1로 업그레이드해야 합니다
...
먼저 내보내야합니다 ...
외국인들은 정말 무책임하다고 하던데...
이전 내보내기 방법에서는 항상 일부 한자가 손실되었습니다.
예를 들어, "엄마 사랑해요"를 "사랑해요"로 바꾸세요...
(보통 데이터의 마지막 단어가 손실됩니다.)
모든 것이 한 세대 뒤쳐져 있습니다 ...
(석류자매의 말에 따르면 "이런 반항적인 행위가 있다는 사실이 정말 흥미진진하다"고 합니다...)
연약한 마음을 지키기 위해...
또한 중국의 전통적인 윤리와 도덕을 유지하기 위해 ...
데이터에 중국어 문자가 포함된 필드를 이진 인코딩으로 변경할 수 있습니다.
구체적인 방법은...
다음 문을 실행할 수 있습니다.
ALTER TABLE `테이블 이름` CONVERT TO CHARACTER SET 바이너리;
이러한 방식으로 다음과 같은 문자 유형 필드가 생성됩니다.
CHAR, VARCHAR 및 TEXT
로 변환됩니다
바이너리, VARBINARY 및 BLOB
그런 다음 4.1 환경으로 내보내고 가져옵니다.
물론 마지막으로 지루한 작업은 다음과 같습니다.
유형을 다시 변경해야 합니다...
4.1로 업그레이드되었습니다...
물론 다운그레이드도 있지만..
다운그레이드하는 방법? ? ?
화장실 갈 때 신는 샌들..
그리고 다음 페이지로 넘어가주세요...
========================================= ==== ===
4.1에서 데이터가 다운그레이드되었습니다.
4.1에서 내보낸 SQL 파일을 하위 버전 프로그램으로 가져올 수 없다는 분들이 계십니다.
문제는 사실 매우 간단합니다..
그리고 MySQL은 이미 우리를 위해 모든 것을 생각해 냈습니다...
내보낼 때 --호환 매개변수를 추가하세요...
귀하의 데이터베이스가 utf8로 인코딩되었다고 가정합니다...
그리고 대상 데이터베이스 버전은 4.0…
그런 다음 명령줄에 다음을 작성합니다.
shell>mysqldump --user=username --password=password --호환=mysql40 --default-character-set=utf8 데이터베이스 > db.sql
이렇게 내보낸 SQL 파일을 하위 버전의 데이터베이스로 성공적으로 가져올 수 있게 되는데...
드디어 데이터베이스 부분이 완성되었습니다...
그런데 PHP 프로그래밍에 어떻게 주의를 기울여야 할까요?
다음 페이지로 넘겨달라고 해야 하는데...
http://www.knowsky.com
=============================================
PHP 파일 인코딩
모든 PHP 파일을 UTF8 인코딩으로 변환해야 합니까?
샌들은 안 된다고 말하는데...
이렇게 표현하자...
파일에 표시해야 할 중국어 문자가 포함되어 있는 경우...
UTF8 인코딩으로 변환해야 합니다...
예를 들어보자:
// 나는 샌들이다
에코 시간();
위의 코드에는 코드가 있지만 ...
하지만 주석에 존재하기 때문에 ...
출력이 안되네요...
따라서 이 페이지는 UTF8 형식으로 변환할 필요가 없습니다...
또 다른 예:
echo "I am Sandals";
이것은 분명히 한자 출력을 가지고 있습니다 ...
그냥 UTF8로 변환하면 되는데...
물론 요즘은 템플릿(언어팩) 기술을 사용하는 프로그램이 많죠...
프로그램(비언어 패키지 파일)에서 출력할 문자를 볼 수 없습니다...
이런 식으로 언어 팩 파일을 UTF8 인코딩으로 변환하기만 하면 됩니다...
(이게 언어팩의 장점이군요... 아하하하하하하...)
'http://www.knowsky.com
=================================================
UTF8은 3바이트를 사용하기 때문에 UTF8 중국어 차단
...
따라서 전통적인 substr 함수는 쓸모가 없습니다.
많은 전문가들이 UTF8 한자 차단 기능을 작성했습니다.
다음은 몇 가지입니다.
1. 먼저 계산한 다음
/**를
취합니다.
* 저자: 잰디 |
* 이메일: [email protected] |
*생성: 200512
* 사용법: echo Join('', String::subString_UTF8('한자', 0, 1));
*/
ini_set('display_errors', 1);
error_reporting(E_ALL ^ E_NOTICE);
클래스 문자열 {
함수 subString_UTF8($str, $start, $lenth)
{
$len = strlen($str);
$r = 배열();
$n = 0;
$m = 0;
for($i = 0; $i < $len; $i++) {
$x = substr($str, $i, 1);
$a = base_convert(ord($x), 10, 2);
$a = substr('00000000'.$a, -8);
if ($n < $start){
if (substr($a, 0, 1) == 0) {
}elseif (substr($a, 0, 3) == 110) {
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$i += 2;
}
$n++;
}또 다른{
if (substr($a, 0, 1) == 0) {
$r[] = substr($str, $i, 1);
}elseif (substr($a, 0, 3) == 110) {
$r[] = substr($str, $i, 2);
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$r[] = substr($str, $i, 3);
$i += 2;
}또 다른{
$r[] = '';
}
if (++$m >= $lenth){
부서지다;
}
}
}
$r을 반환;
} // subString_UTF8 종료
}//문자열 끝
echo Join('', String::subString_UTF8('한자', 0, 1));
2. 샌들을 먼저 자르고 나중에 자르는게 참 영리한 것 같아요...
기존의 가로채기 기능을 사용하여 먼저 잘라냅니다.
그런 다음 단일 한자가 분할되는지 확인하십시오.
그렇다면... 처리해 보세요...
substr 함수의 세 번째 매개변수는 3보다 커야 한다는 점에 유의하는 것이 중요합니다.
샌들을 신지 않는 이유에 대해 설명해 주실 수 있나요?
// utf-8 문자열의 마지막 문자를 제거하는 다듬기 함수
// http://en.wikipedia.org/wiki/UTF-8 의 지침을 따릅니다.
// 도탄
// 사용법: $str = utf8_trim(substr($str,0,50));
함수 utf8_trim($str) {
$len = strlen($str);
for ($i=strlen($str)-1; $i>=0; $i-=1){
$hex .= ' '.ord($str[$i]);
$ch = ord($str[$i]);
if (($ch & 128)==0) return(substr($str,0,$i));
if (($ch & 192)==192) return(substr($str,0,$i));
}
return($str.$hex);
}
$str = '한자';
echo utf8_trim(substr($str,0,3));
3. 다른 방법도 있습니다.
예를 들어 007pig는 vBulletin의 중국어 버전으로 작성된 함수입니다...
짧고 달콤한...
소스코드 공개가 불편하네요...
미안 새...
오늘은 여기서 글을 마치겠습니다...
작성되지 않은 트랜스코딩 등의 문제도 있고...
요즘 바쁘다...
시간이 나면 계속 정리하세요...
http://www.quchao.com/?p=6&pp=1