Drupal编码和节点插入

时间:2011-02-17 11:26:29

标签: mysql drupal drupal-6 character-encoding drupal-modules

我有一个用于存储提及的CCK类型(社交媒体搜索提及)。我认为有些提到的是ASCII(我对这些东西的了解很少)。

我从API中检索数据,然后使用node_save保存到Drupal。

我的问题是,我应该使用什么来安全地将我得到的内容转换成Drupal和MySQL很满意的格式?

我得到的特定db_query错误是无用的“第3538行的test1 \ includes \ common.inc中的警告”。尼斯。我已将其描述为编码,因为我使用以下代码使输入安全,但它不适用于所有输入。

$node->title = htmlentities($item['title'], ENT_COMPAT, 'UTF-8');

它适用于某些ASCII字符,例如那些方形字符[]等,但不适用于“行けなくてもずっとユーミンは聴きつづけます”。

我真的被困住了。 :(

更新:我从PHP获得的EXACT错误是“在3538行的D:\ sites \ test1 \ includes \ common.inc中的警告”,该行显示为“if(db_query($ query,$ values)){ ”

更新2:我已经确认我收到的数据的编码是UTF8。这真的没有意义,我已经确认数据库中的排序规则是utf8_general_ci。

更新3:其中一个标题是:Facebook风扇成本是多少? $ 1.07

输出:

  

var_export(array_map('ord',str_split($ node-> title))

给了我有趣问号的字符160(在eclipse中是[]的正方形)。

更新4:MySQL版本为5.1.41,列上的排序规则为utf8_general_ci。

更新5:我设法让Drupal用db_queryd打印查询。有趣的是现在我得到了确切的错误信息而不是“警告”,但Drupal在日志中仍然没有这个错误! WTF。所以确切的sql是:

INSERT INTO node (vid, type, language, title, uid, status, created, changed, comment, promote, moderate, sticky, tnid, translate) VALUES (0, 'sm_mention', '', 'How Much Does A Facebook Fan Cost?� $1.07 (Geoffrey A. Fowler/Digits)', 1, 1, 1298395302, 1298395302, 0, 0, 0, 0, 0, 0)

给出的错误是:字符串值不正确:'\ xA0 $ 1.0 ...'第1行的列'title'

老实说这听起来像是不喜欢扩展的ascii角色。

更新6:

 SHOW CREATE TABLE node: 

   CREATE TABLE `node` (
  `nid` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `vid` int(10) unsigned NOT NULL DEFAULT '0',
  `type` varchar(32) NOT NULL DEFAULT '',
  `language` varchar(12) NOT NULL DEFAULT '',
  `title` varchar(255) NOT NULL DEFAULT '',
  `uid` int(11) NOT NULL DEFAULT '0',
  `status` int(11) NOT NULL DEFAULT '1',
  `created` int(11) NOT NULL DEFAULT '0',
  `changed` int(11) NOT NULL DEFAULT '0',
  `comment` int(11) NOT NULL DEFAULT '0',
  `promote` int(11) NOT NULL DEFAULT '0',
  `moderate` int(11) NOT NULL DEFAULT '0',
  `sticky` int(11) NOT NULL DEFAULT '0',
  `tnid` int(10) unsigned NOT NULL DEFAULT '0',
  `translate` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`nid`),
  UNIQUE KEY `vid` (`vid`),
  KEY `node_changed` (`changed`),
  KEY `node_created` (`created`),
  KEY `node_moderate` (`moderate`),
  KEY `node_promote_status` (`promote`,`status`),
  KEY `node_status_type` (`status`,`type`,`nid`),
  KEY `node_title_type` (`title`,`type`(4)),
  KEY `node_type` (`type`(4)),
  KEY `uid` (`uid`),
  KEY `tnid` (`tnid`),
  KEY `translate` (`translate`)
) ENGINE=InnoDB AUTO_INCREMENT=1700 DEFAULT CHARSET=utf8

1 个答案:

答案 0 :(得分:3)

\xA0不是UTF8序列的有效开头。

具有NO-BREAK SPACE代码点Unicode的{​​{1}}字符应在0x00A0中编码为0xC2A0

如上所述,您的输入字符串已损坏,它不是有效的UTF8