2

嗨,我正在从一个在 cmd 中运行的 php 脚本上使用编码为“ISO-8859-7”的站点读取一个用希腊语编写的字符串,目的是在 mysql 数据库中添加它的一部分。问题是,在我向数据库添加任何内容之前,我会回显并且似乎存在编码问题。我附上了代码的相关部分。

$fil1=hitFormGet("http://www.topsites.gr/gr_domain_list/".$site->href);
$fil1=iconv("ISO-8859-7","UTF-8",$fil1);
$html1=str_get_html($fil1);
$data=$html1->find('td class="res3" table tbody table tbody tr');
echo "ttl".$data[4]->plaintext."\n";

输出为 ttl Φιλοξενεί 站点:Îαί

(这里看起来也不同......)

4

1 回答 1

3

处理 PHP 和 MySQL 时使用 UTF-8。这是我的连接方式:

$DB_USERNAME = '';
$DB_PASSWORD = '';
$DB_HOST = '';
$DB_NAME = '';

$pdo_attributes = array();
$pdo_attributes[PDO::ATTR_EMULATE_PREPARES] = FALSE;

$dsn = sprintf('mysql:dbname=%s;host=%s;charset=utf8', $DB_NAME, $DB_HOST);
$pdo = new PDO($dsn, $DB_USERNAME, $DB_PASSWORD, $pdo_attributes);

此外,在 PHP < 5.3.6 中设置此附加属性:

$pdo_attributes[1002] = 'SET NAMES utf8';

整数1002代表 PDO::MYSQL_ATTR_INIT_COMMAND,但是该命令在 PHP < 5.3.1 中被破坏。

在此答案的原始内容下方查找,该内容现已过时。这是使用不再推荐的旧mysql_*功能的连接方式,以及当时需要的其他一些防止乱码的技巧:

mysql_connect ("localhost", "DB_USER", "DB_PASSWORD") or die (mysql_error());
mysql_select_db ("DATABASE_NAME") or die (mysql_error());

mysql_query("SET character_set_client=utf8"); 
mysql_query("SET character_set_connection=utf8"); 
mysql_query("SET character_set_database=utf8"); 
mysql_query("SET character_set_results=utf8"); 
mysql_query("SET character_set_server=utf8"); 
mysql_query("SET NAMES 'utf8'");
于 2012-04-19T03:16:39.063 回答