【问题标题】:Php encoding with Greek用希腊语进行 PHP 编码
【发布时间】:2012-04-30 13:21:55
【问题描述】:

您好,我正在从一个站点读取一个用希腊语编写的字符串,该字符串在 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 Φιλοξενεί 网站 : Îαί

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

【问题讨论】:

  • 在渲染的页面中,你是否设置了正确的字符编码(utf-8)?
  • 要确定是否确实是您页面的字符编码有问题,请右键单击该页面并将字符编码更改为 utf-8。如果显示正常,则让 php 将字符集标头作为 utf-8 发送:ini_set('default_charset', 'UTF-8');

标签: php utf-8 character-encoding internationalization iso


【解决方案1】:

在处理 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

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

整数 1002 代表 PDO::MYSQL_ATTR_INIT_COMMAND,但是该命令在 PHP

在下面找到这个答案的原始内容,现在已经过时了。这是使用旧的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'");

【讨论】:

  • 谢谢你让我开心!
  • @MurtazaAshraf:我很高兴它有帮助,但你真的不应该再使用mysql_* 函数了。我刚刚更新了 PDO 的答案,请改用它!
猜你喜欢
  • 2017-03-15
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 2016-05-02
  • 1970-01-01
相关资源
最近更新 更多