>  기사  >  백엔드 개발  >  PHP 중국어 잘못된 분류 및 솔루션

PHP 중국어 잘못된 분류 및 솔루션

伊谢尔伦
伊谢尔伦원래의
2016-11-26 16:31:061099검색

PHP+MYSQL 웹사이트 개발에서는 일반적으로 브라우저가 중국어 문자를 출력할 때 잘못된 문자가 발생합니다. 이 문제의 원인은 주로 HTML 콘텐츠 인코딩, PHP 파일 인코딩 및 MySQL 데이터베이스 인코딩 간의 불일치로 인해 발생합니다. 세 가지 관계를 통합하는 방법을 간략하게 설명하기 위해 UTF-8을 예로 들어 보겠습니다.

test_charset.php라는 새 PHP 파일을 만들고 다음 코드를 파일에 저장합니다.

<?php
    $charset = "utf8";
    $con = mysql_connect("localhost", "root", "");
    mysql_query("SET character_set_connection=$charset, character_set_results=$charset, character_set_client=binary", $con);
    mysql_select_db("ecshop", $con);
    $sql = "SELECT user_name, email FROM ecs_admin_user WHERE user_id = 4";
    $result = mysql_query($sql, $con);
    $array = mysql_fetch_array($result, MYSQL_ASSOC);
    mysql_close($con);
    $name = $array["user_name"];
    $email = $array["email"];
?>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
        <h1>你好, <?php echo $name; ?>!</h1>
        <h2>你的邮件是:<a href="mailto:<?php echo $email; ?>"><?php echo $email; ?></a></h2>
    </body>
</html>

HTML Content Encoding

위 22번:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

여기서는 HTML을 구문 분석할 때 브라우저가 UTF-8 인코딩을 사용하도록 지정합니다. 여기에 지정하지 않으면 브라우저는 자체 기본 인코딩을 사용합니다. 다양한 브라우저의 기본 인코딩은 다릅니다. 예를 들어 IE6은 GB2312이고 FireFox는 UTF-8입니다. 따라서 위 코드에 22행이 없으면 FireFox에서는 정상적으로 표시되지만 IE6에서는 잘못된 문자가 표시됩니다.

PHP 파일 인코딩

PHP 파일 자체도 일관된 인코딩을 가져야 합니다. PHP 파일의 인코딩을 확인하는 방법은 무엇입니까? Windows에서는 메모장을 사용하여 간단히 처리할 수 있습니다. 아래와 같이 메모장으로 PHP 파일을 열고 "파일" 메뉴에서 "다른 이름으로 저장..."을 선택합니다.

PHP 중국어 잘못된 분류 및 솔루션

파일 하단에 "가 있습니다. 열린 대화 상자 인코딩" 옵션을 선택하면 현재 표시되는 내용은 파일의 현재 인코딩입니다. 다른 인코딩으로 변경하려면 드롭다운 목록 상자에서 해당 인코딩을 선택하고 "저장" 버튼을 클릭하세요.

MySQL 데이터베이스 인코딩

데이터베이스 연결 성공 후 위 코드의 7행과 같이 인코딩 설정 명령을 최대한 빨리 실행해야 합니다. 여기서 특별히 주의해야 할 점은 UTF-8이 일반적인 쓰기 방식인데, MySQL에서는 중간에 수평선이 없이 UTF8로 축약된다는 점입니다. 위의 7행은 연결 인코딩을 utf-8 대신 utf8($charset="utf8")로 설정합니다. 참조용으로 ECShop 설정 연결 인코딩의 전체 구현이 여기에 첨부되어 있습니다. 파일은 include/cls_mysql.php입니다.

function set_mysql_charset($charset)
{
    /* 如果mysql 版本是 4.1+ 以上,需要对字符集进行初始化 */
    if ($this->version > &#39;4.1&#39;)
    {
        if (in_array(strtolower($charset), array(&#39;gbk&#39;, &#39;big5&#39;, &#39;utf-8&#39;, &#39;utf8&#39;)))
        {
            $charset = str_replace(&#39;-&#39;, &#39;&#39;, $charset);
        }
        if ($charset != &#39;latin1&#39;)
        {
            mysql_query("SET character_set_connection=$charset, character_set_results=$charset, character_set_client=binary", $this->link_id);
        }
    }
}


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.