将字符串转换为utf-8

时间:2013-03-14 12:43:01

标签: php utf-8 pdo

我在这里已经阅读了很多答案,但无论我尝试什么,我都无法解决如何解决这个问题。

问题

我有正在导入数据库的数据。这些数据有一些特殊的字符,比如'“” - é(但不限于那些)。

显示数据时,它们显示为黑色菱形。

我尝试了什么

我遵循了这个:http://kunststube.net/frontback/但是当我进行导入时,它只是在第一个时打破'并忽略其余的字符串(仍然正确插入)。

我尝试使用utf8_encode()转换字符串,我尝试htmlentities()我尝试使用mb_convert_encoding()所有结果各不相同但实际上并没有完全解决问题,有些删除了一些字符,有些则在IE等上提供lil方格。

我认为问题是

我认为问题在于不知道原始编码,所以我运行mb_detect_encoding()并且它什么也没有返回 - 那么这意味着什么?我猜它无法检测到编码。

所以我正在努力的是如何在不破坏字符串的情况下将其编码为utf8,以便我可以正确存储它。

观察

如果我设置了header('Content-Type: text/html; charset=utf-8');,我们会获得黑色菱形,但如果我设置header('Content-Type: text/html; charset=ISO-8859-1');则会显示正确。

所以知道 - 我应该在ISO-8859-1中显示我的整个网站我应该将该字符串转换为utf8 ..是否有偏好如何做到这一点?

当数据库是latin1且我在PDO连接中没有包含字符集时,数据已正确存储在数据库中

其他

我正在使用PDO

new PDO("mysql:host=" . $G['PDO_HOST'] . ";dbname=" . $G['PDO_DB'] . ";charset=utf-8", $G['PDO_USER'], $G['PDO_PASS'],array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));

问题字符串的副本:

Informed by his eclectic background and varied passions for décor, travel, entertaining and food, Nathan Turner’s American Style will appeal to readers looking to incorporate Turner’s stylish and relaxed aesthetic into their home and life.

对此的任何意见都会非常感激 - 在这个

上挣扎了一段时间

更新

这是我的表

CREATE TABLE IF NOT EXISTS `page` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `url` varchar(255) NOT NULL,
  `summary` text NOT NULL,
  `content` text NOT NULL,
  `search` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=937 ;

所以表格是utf8格式。

我已将数据库连接更改为:

$dbc = new PDO("mysql:host=" . $G['PDO_HOST'] . ";dbname=" . $G['PDO_DB'], $G['PDO_USER'], $G['PDO_PASS']);
$dbc->query("SET NAMES utf8");

正如“你的常识”指出PHP版本。

但是现在我已经完成了这一切,它在第一个'

处剪切了插入物

字符串:With a style that is accessible and chic, Turner’s aesthetic is Nate meets Colin and the Magazine.

存储:With a style that is accessible and chic, Turner

更新2

我正在使用预备语句..所以正在破坏的内容在这里:

$stmt->bindParam(':content',$content, PDO::PARAM_STR);

2 个答案:

答案 0 :(得分:1)

charset=utf8
           ^ should be NO dash here

此外,如果你的PHP版本低于5.3.6,它无论如何都不会工作,必须在连接后运行SET NAMES utf8查询。

对于插入物,它们不会切割任何东西。这是你的HTML字段。

要输出HTML属性,请始终使用带有ENT_QUOTES标记的htmlspecialchars

答案 1 :(得分:-1)

在数据库中,将排序规则类型的特定字段设置为表中的“utf8_general_ci”。