葡萄牙语的PHP + MySQL编码问题(PT-Br)

时间:2010-07-17 21:47:32

标签: php mysql utf-8 character-encoding

我正在开发一个巴西葡萄牙语的网站,我正面临着一些令人烦恼的编码问题。

应该这样写的字:óbito正是这样写的: bito

我注意到虽然文本仍在数据库中,但它们还可以。但是当我在PHP中使用echo时,会出现编码问题。

我已经完成但没有帮助的事项列表:

1-设置要保存为UTF-8的PHP文件

2-我正在使用此元标记<meta http-equiv="content-type" content="text/html; charset=utf-8" />

3-我使用了这个SQL查询:

CREATE DATABASE db_name
    CHARACTER SET utf8
    DEFAULT CHARACTER SET utf8
    COLLATE utf8_general_ci
    DEFAULT COLLATE utf8_general_ci
    ;

ALTER DATABASE db_name
    CHARACTER SET utf8
    DEFAULT CHARACTER SET utf8
    COLLATE utf8_general_ci
    DEFAULT COLLATE utf8_general_ci
    ;

ALTER TABLE tbl_name
    DEFAULT CHARACTER SET utf8
    COLLATE utf8_general_ci
    ;

5 个答案:

答案 0 :(得分:4)

您可以使用此功能更改字符集:

$q = mysql_set_charset('utf8');
var_dump($q);

(如果函数返回true则表示已成功)。这应该可以解决您的连接问题。

对于旧版本的PHP,您可以使用以下内容:

<?php
 if (function_exists('mysql_set_charset') === false) {
     /**
      * Sets the client character set.
      *
      * Note: This function requires MySQL 5.0.7 or later.
      *
      * @see http://www.php.net/mysql-set-charset
      * @param string $charset A valid character set name
      * @param resource $link_identifier The MySQL connection
      * @return TRUE on success or FALSE on failure
      */
     function mysql_set_charset($charset, $link_identifier = null)
     {
         if ($link_identifier == null) {
             return mysql_query('SET NAMES "'.$charset.'"');
         } else {
             return mysql_query('SET NAMES "'.$charset.'"', $link_identifier);
         }
     }
 }
 ?>

似乎PHP默认使用latin1,我找不到更改默认值的方法。所以我猜你每次开始新连接时都必须使用mysql_set_charset()

Boa Sorte。

答案 1 :(得分:4)

不要试图重新发明轮子,保持简单: 选择数据库后,只需使用以下行:

mysql_query("SET NAMES 'utf8'") OR die(mysql_error()); 

答案 2 :(得分:0)

将此用于葡萄牙语:

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

答案 3 :(得分:0)

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

将元标记放在html / php文档的<head>标记内。

如果您使用带有PHP的MySQL数据库,还需要在主函数文件中运行此查询mysql_query("SET NAMES 'utf8'");

答案 4 :(得分:0)

通过以下方式解决:在数据库连接字符串之后

$con = mysqli_connect('localhost', 'root', 'password', 'testdb');
if (mysqli_connect_errno()) {
    exit("Failed to connect to MySQL: " . mysqli_connect_error());
}
mysqli_set_charset($con, 'utf8');