PHP - Drupal创建节点utf8罗马尼亚字符

时间:2017-09-21 11:02:29

标签: php drupal utf-8 special-characters

我有一个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'];

我的问题是罗马尼亚字符被一些奇怪的字符所取代。见图:

Image01

我在此节点类型上将多语言设置为true。当我编辑由此脚本创建的节点时,语言设置正确。

我正在使用drupal 7.56。

关于如何正确进入身体和浏览器的任何想法?

编辑: 我添加了所有@ M0ns1f sayd。相同的输出。

2 个答案:

答案 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

source

然后尝试添加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']));