Возникла проблема с кодировками в Drupal. Я сейчас занимаюсь написанием скрипта для автоматического наполнения сайта на d7+commerce. Я Вытаскиваю товары из файла .csv и пытаюсь создать товары в commerce (этот вопрос уже решен). Но возникла непонятная мне проблема с кодировакой.
При обычном выборе из файла необходимых данных:
<?php
$f = fopen("http://kupets.zp.ua/sites/all/modules/addgoods/Kprice3.csv", "r");
for ($i=0; $data=fgetcsv($f,0,"\t"); $i++) {
$num = count($data);
if($i != 0){
// echo "<h3>String number - $i (fields: $num):</h3>";
$data[1] = charset_x_win($data[1]);
echo "SKU: ".$data[0]."<br>";
echo "Name: ".charset_x_win($data[1])."<br>";
echo "Price: ".$data[2]."<br><hr>";
}
}
fclose($f);
?>
я получаю корректные данные:
SKU: 10519301
Name: Шайба 5*10*1
Price: 0.20
SKU: 10788811
Name: Гайка М5 низкая
Price: 0.20
SKU: 10794011
Name: Гайка М4 низкая
Price: 0.50
SKU: 12642701
Name: Шайба 8*12 медная
Price: 0.80
но при попытке записи этих данных в commerce:
<?php
$f = fopen("http://kupets.zp.ua/sites/all/modules/addgoods/Kprice3.csv", "r");
for ($i=0; $data=fgetcsv($f,0,"\t"); $i++) {
$num = count($data);
if($i != 0){
// echo "<h3>String number - $i (fields: $num):</h3>";
$data[1] = charset_x_win($data[1]);
echo "SKU: ".$data[0]."<br>";
echo "Name: ".charset_x_win($data[1])."<br>";
echo "Price: ".$data[2]."<br><hr>";
add_product($data[0], $data[1], $data[2]);
}
}
fclose($f);
function
add_product($sku, $title, $price){
$sku = addslashes(trim($sku));
$title = addslashes(trim($title));
$price = (double)trim($price);
echo "SKU: ".$sku."<br>";
echo "Name: ".$title."<br>";
echo "Price: ".$price."<br>";
$product = commerce_product_load_by_sku($sku);
$product->type = 'product';
$product->sku = $sku;
$product->title = $title;
// Устанавливаем цену с учетом скидки
$product->commerce_price['und'][0]['amount'] = (int)($price * 100); // Цена товара
$product->commerce_price['und'][0]['currency_code'] = 'UAH';
$product->status = 1;
$product->commerce_stock['und'][0]['value'] = (int)trim('456789');
$result = commerce_product_save($product);
return $result;
}
?>
Результат выходит следующий:
SKU: 10519301
Name: ����� 5*10*1
Price: 0.20
SKU: 10519301
Name: ����� 5*10*1
Price: 0.2
Кто может подсказать решение этой проблемы?
Комментарии
В коде нигде не упоминается UTF8 - может, поэтому?
сам файл перекадируется в UTF8 и проблема решиться.
я пробовал делать использовать функцию utf8_encode, чтоб привести строку к utf, но лучше это выглядеть не стало:
<?php
Creation entities...
SKU: 10519301
Name: Øàéáà 5*10*1
Price: 0.20
?>
Товары то добавляются, но совсем не читабельными(
iconv надо использовать.
файл сохрани в utf-8.
Да, Вы правы. Вот эти две строки исправили ситуацию:
<?php
$sku = iconv('Windows-1251', 'utf-8', addslashes(trim($sku)));
$title = iconv('Windows-1251', 'utf-8', addslashes(trim($title)));
?>