【问题标题】:converting string into utf-8将字符串转换为 utf-8
【发布时间】:2013-03-02 19:43:59
【问题描述】:

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

问题

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

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

我的尝试

我遵循了这个: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.. 是否有偏好如何做到这一点? p>

当数据库是 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);

【问题讨论】:

    标签: php utf-8 pdo


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:
      charset=utf8
                 ^ should be NO dash here
      

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

      至于刀片,它们不会切割任何东西。这是您的 HTML 字段。

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

      【讨论】:

      • 这样做会在第一个 ' 处中断导入
      • 我的错误查询必须没有 = 符号。内容类型必须用破折号设置为 utf-8
      • 我已经更新了问题.. 字符串现在只插入第一个撇号
      • 抱歉,如果我一开始就没有明确说明,数据来自 CSV,而不是 HTML 字段 - 但是我已经这样做了$content = htmlspecialchars($data[56],ENT_QUOTES);,但它仍然会中断
      • 嗯,它可能是任何其他没有转义引号的地方。无论如何,这已经是不同的问题了
      猜你喜欢
      • 1970-01-01
      • 2012-12-05
      • 2012-02-20
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多