2013-03-14 72 views
1

我一直在读这里的很多答案,但无论我尝试我不能解决如何解决这个问题。将字符串转换为utf-8

的问题

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

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

我已经试过

我也跟着这样的:http://kunststube.net/frontback/但是当我做进口,它只是打破在第一”而忽略字符串的其余部分(仍然插入正确)。

我试着utf8_encode()转换的字符串,我已经试过htmlentities(),我已经使用mb_convert_encoding()都已经变化的结果,但实际上并没有完全解决的问题,一些删除一些字符试过,有的给上平方律IE等

我认为这个问题是

我认为这个问题是不知道原始编码做的,所以我跑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 ..是否有如何做到这一点的偏好?

当DB是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. 

任何对此的投入将非常感激 - 这个

UPDATE

已经挣扎了一会儿这里是我的表

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格式。

我已经改变了DB连接:

$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); 

回答

1
charset=utf8 
     ^should be NO dash here 

此外,如果您的PHP版本低于5.3.6,它将无法正常工作,SET NAMES utf8查询必须在连接后运行。

至于插入,他们不会削减任何东西。这是你的HTML字段。

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

+0

这样做会在第一个' – 2013-03-14 13:03:42

+0

处破坏导入操作,我的查询必须没有= sign。内容类型必须设置为带破折号的utf-8 – 2013-03-14 13:03:44

+0

我已经更新了该问题..字符串现在只插入到第一个撇号 – 2013-03-14 13:10:07

-1

在数据库中,将整理类型的特定字段设置为表中的“utf8_general_ci”。

+0

它已经是utf8_general_ci – 2013-03-14 13:26:05