0

我有一个 csv 文件,我想将其转换为 xml,但 CSV 被编码为 ANSI,当生成 xml 文件时,所有特殊的字符都像:áéőúűóüöí 看起来像这样:ó Ãzű

还有一些 html 标签会弄乱整个 XML。我尝试添加strip_tags,但没有用现在我在产品之间有空节点,HTML代码遍布XML而不是节点之间哦,由于CSV我不得不放一个array_pop()来删除额外的每行末尾的分号。

我的 CSV 看起来像这样:

title;seller_product_id;status;price;discount_price;warranty;manufacturer;weight;category;disable_shipping;photo_url_1;photo_url_2;photo_url_3;photo_url_4;seller_category;video_link;isbn13;gtin;product_code;warehouse_code;page_link;availability_237;shipping_fee_4_1;shipping_fee_4_2;description;
"tea csipkebogyó ízű 20*1,5g..";"5999881069013";1;"121";;1;;"60";8510;0;"http://mydomain/00003125_mid.jpg";"http://mydomain/00001634_mid.jpg";;;"Élelmiszer; Tea";;;;"5999881069013";"000000019231";" http://mydomain/producturl";"1744";;;<table width="975" cellspacing="0" cellpadding="0"><tbody><tr><td height="151" valign="top" style="background: url('http://mydomain/vlshop.PNG') no-repeat" colspan="2"></td></tr><tr><td style="font-family: Arial,Helvetica,sans-serif" colspan="2"><div style="text-align: justify"><div style="text-align: center"><span style="color: rgb(255, 0, 0)"><span style="font-size: large"><strong>Több termék vásárlása esetén használja a kosaras vásárlást!</strong></span></span></div><span style="color: rgb(255, 0, 0)"><span style="font-size: medium"><strong><br /><br />tea csipkebogyó ízű 20*1,5g..<br /><br />Cikkszám: 000000019231<br /><br />STAMFORD tea csipkebogyó ízű 20*1,5g..<br /><br />Csak új és garanciális termékeket árusítunk!<br />Csere és beszámítás nem lehetséges!<br /><br /><span style="font-size: large">Szállítási és fizetési információk:<br /></span><br />Lehetőség van a termékeket személyesen is átvenni:<br />- Munkanapokon 8-16 óráig: Szada, (Pest Megye)! </strong></span></span><span style="color: rgb(255, 0, 0)"><span style="font-size: medium"><strong><br /><br />Legalacsonyabb szállítás díjunk 660 Ft, ajánlott postázásra nincs lehetőség!<br /><br />Futárszolgálati díjaink előreutalás esetén:<br />- 0kg-2kg: 660 Ft<br />- 2kg-5kg: 800 Ft<br />- 5kg-30kg: 1200 Ft<br />- Utánvét +:  150 Ft<br /><br />A reggel 8 óráig beérkezett rendeléseket tudjuk aznap feldolgozni!<br />A fizetéssel és az átvétellel kapcsolatos igényeit kérjük tüntesse fel a megjegyzés rovatban!<br /><br /><br /></strong></span></span></div></td></tr></tbody></table>;

我正在使用它来创建 XML:

<?php

error_reporting(E_ALL ^ E_NOTICE);
ini_set("display_errors", true);
function csv2xml($file, $container = 'data', $rows = 'row')
{
$r = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n";
$r .= "<{$container}>\n";
$row = 0;
$cols = 0;
$titles = array();
$handle = @fopen($file, 'r');
if (!$handle) return $handle;
while (($data = fgetcsv($handle, 1000, ';')) !== FALSE)
{
array_pop($data);
if ($row > 0) $r .= "\t<{$rows}>\n";
if (!$cols) $cols = count($data);
for ($i = 0; $i < $cols; $i++)
{
if ($row == 0)
{
$titles[$i] = $data[$i];
continue;
}
//print_r($data[$i]);
$r .= "\t\t<{$titles[$i]}>";
$r .= strip_tags(str_replace('; ', '/', $data[$i]));
$r .= "</{$titles[$i]}>\n";
}
if ($row > 0) $r .= "\t</{$rows}>\n";
$row++;
}
fclose($handle);
$r .= "</{$container}>";
return $r;
}
$xml = csv2xml('feed.csv', 'products', 'product');
$xmlfile = @fopen('test.xml', 'wb') or die('Could not open XML file for writing');
fwrite($xmlfile, $xml) or die('Could not write string to XML file');
fclose($xmlfile);
echo "Successfully wrote the XML file";

?>

哦,无法编辑原始 CSV,因为我从外部 url 获取文件。

4

1 回答 1

0

我解决了 :) 我不得不增加长度参数,因为线条长于 1000。所以我的解决方案是这样

while (($data = fgetcsv($handle, 4000, ';')) !== FALSE) {...}

不知何故,这也解决了字符编码问题。

于 2012-08-22T20:38:39.523 回答