我有一个cronjob,每天都会创建一个新节点。正文值是罗马尼亚语,因此该文本包含罗马尼亚变音符号。
数据库列都是utf8-general-ci。 (两个表格:我得到的数据和drupal的字段正文表格。)
我正在使用此代码创建节点:
$new_node = new stdClass();
$new_node->type = 'quote_of_the_day';
node_object_prepare($new_node);
$new_node->language = 'ro';
$new_node->uid = USER_ID;
$new_node->title = $citat['titlu'];
$new_node->body['und'][0]['value'] = $citat['text'];
$new_node->body['und'][0]['format'] = 'full_html';
$new_node->body['und'][0]['safe_value'] = $citat['text'];
我的问题是罗马尼亚字符被一些奇怪的字符所取代。见图:
我在此节点类型上将多语言设置为true。当我编辑由此脚本创建的节点时,语言设置正确。
我正在使用drupal 7.56。
关于如何正确进入身体和浏览器的任何想法?
编辑: 我添加了所有@ M0ns1f sayd。相同的输出。
答案 0 :(得分:1)
首先,您需要在页面标题中添加HTML output
..指定字符集:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
您可以使用PHP
中的(此行必须是您代码中的第一行):
<?php header("Content-type: text/html; charset=utf-8");?>
然后你需要在你网站的根目录中写一个.htaccess
:
`# Set httpd charset to utf-8
AddDefaultCharset On
AddDefaultCharset utf-8`
将php charset设置为utf-8并设置mbstring(您可能需要安装mbstring模块)
php_value default_charset utf-8
php_value mbstring.internal_encoding utf-8
php_value mbstring.func_overload 7
然后尝试添加mb_convert_encoding
功能
$new_node = new stdClass();
$new_node->type = 'quote_of_the_day';
node_object_prepare($new_node);
$new_node->language = 'ro';
$new_node->uid = USER_ID;
$new_node->title = $citat['titlu'];
$new_node->body['und'][0]['value'] = mb_convert_encoding($citat['text'], 'HTML-ENTITIES', 'UTF-8');
$new_node->body['und'][0]['format'] = 'full_html';
$new_node->body['und'][0]['safe_value'] = mb_convert_encoding($citat['text'], 'HTML-ENTITIES', 'UTF-8');
或将$citat['text']
更改为此
htmlentities(utf8_encode($citat['text']), 0, "UTF-8")
答案 1 :(得分:0)
$new_node->body['und'][0]['value'] = mb_convert_encoding($citat['text'], 'HTML-ENTITIES', mb_detect_encoding($citat['text']));