2017-09-21 2 views
0

J'ai un cronjob qui crée un nouveau nœud tous les jours. La valeur du corps est en roumain, de sorte que le texte contient des signes diacritiques roumains.PHP - Drupal créer des caractères roumains utf8 nœud

Les colonnes DB sont toutes utf8-general-ci. (les deux tables: celle dont je reçois les données et la table de corps du champ de drupal).

J'utilise ce code pour créer le noeud:

$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']; 

Mon problème est que les caractères roumains sont remplacés par des caractères étranges. Voir l'image:

Image01

Je mets multilingue à true sur ce type de noeud. Lorsque je modifie un nœud créé par ce script, la langue est correctement définie.

J'utilise drupal 7.56.

Une idée sur la façon d'obtenir la bonne dans le corps et le navigateur?

Modifier: J'ai ajouté tous les @ M0ns1f sayd. La même sortie

Répondre

1

D'abord, vous devez spécifier le jeu de caractères pour HTML output .. dans votre tête la page ajouter:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

dans PHP vous pouvez utiliser (cette ligne doit être d'abord dans votre code):

<?php header("Content-type: text/html; charset=utf-8");?> 

alors vous devez écrire un .htaccess dans votre répertoire racine de votre site:

`# Set httpd charset to utf-8 
AddDefaultCharset On 
AddDefaultCharset utf-8` 

Set php charset utf-8 et mbstring configuration (vous devrez peut-être installer le module mbstring)

php_value default_charset utf-8 
php_value mbstring.internal_encoding utf-8 
php_value mbstring.func_overload 7 

source


puis essayez d'ajouter mb_convert_encoding fonction

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

ou modifiez $citat['text'] à ce

htmlentities(utf8_encode($citat['text']), 0, "UTF-8") 
+0

a fait tout cela. Même sortie –

+0

@ sebastian.roibu voir la modification que j'ai faite dans la réponse – M0ns1f

+0

Ne fonctionne toujours pas. nouvelle image: https://imgur.com/a/AbIN0 –

0

Avez-vous essayé:

$new_node->body['und'][0]['value'] = mb_convert_encoding($citat['text'], 'HTML-ENTITIES', mb_detect_encoding($citat['text']));