You are here:  » parsing xml with utf8 special chars


parsing xml with utf8 special chars

Submitted by Wagger on Fri, 2009-01-30 08:17 in

Hi just bought your program because after trying your demo I thought it could do what I needed so hoping you can help. Here is the xml I am trying to parse:

<MorgDKP2><version>1.7</version><Aliases></Aliases><DKPChanges><key1><name>Group</name><value>1</value><eqdkp>usr_web755_3</eqdkp><prefix>eqdkp_</prefix><event>Ontime Bonus</event><addtype>Group</addtype><members><key1>Adrana</key1><key2>Bartok</key2><key3>Crackalaka</key3><key4>Danarus</key4><key5>Dannii</key5><key6>Darkenknight</key6><key7>Ghaleon</key7><key8>Graayy</key8><key9>Gyza</key9><key10>Huarang</key10><key11>Kayluul</key11><key12>Leoh</key12><key13>Låncelot</key13><key14>Oprah</key14><key15>Picard</key15><key16>Praetora</key16><key17>Raigne</key17><key18>Sharpclaw</key18><key19>Sindelle</key19><key20>Tirdal</key20><key21>Trisette</key21><key22>Vancleave</key22><key23>Wildmonkey</key23></members></key1><key2><name>Group</name><value>1</value><eqdkp>usr_web755_3</eqdkp><prefix>eqdkp_</prefix><event>Ironman Bonus</event><addtype>Group</addtype><members><key1>Adrana</key1><key2>Bartok</key2><key3>Crackalaka</key3><key4>Danarus</key4><key5>Dannii</key5><key6>Darkenknight</key6><key7>Ghaleon</key7><key8>Graayy</key8><key9>Gyza</key9><key10>Huarang</key10><key11>Kayluul</key11><key12>Leoh</key12><key13>Låncelot</key13><key14>Oprah</key14><key15>Pellykin</key15><key16>Picard</key16><key17>Praetora</key17><key18>Raigne</key18><key19>Sharpclaw</key19><key20>Sindelle</key20><key21>Sugarbomb</key21><key22>Tirdal</key22><key23>Trisette</key23><key24>Vancleave</key24><key25>Wildmonkey</key25></members></key2></DKPChanges><Raids><key1><zone>The Obsidian Sanctum</zone><date>01/25/09 22:02:07</date><eqdkp>usr_web755_3</eqdkp><prefix>eqdkp_</prefix><Attendees><key1><name>Crackalaka</name><race>Gnome</race><level>80</level><guild>Dark Aftermath</guild><class>Mage</class></key1><key2><name>Tirdal</name><race>Dwarf</race><level>80</level><guild>Dark Aftermath</guild><class>Paladin</class></key2><key3><name>Trisette</name><race>Human</race><level>80</level><guild>Dark Aftermath</guild><class>Mage</class></key3><key4><name>Låncelot</name><race>Human</race><level>80</level><guild>Dark Aftermath</guild><class>Death Knight</class></key4><key5><name>Kayluul</name><race>Draenei</race><level>80</level><guild>Dark Aftermath</guild><class>Shaman</class></key5><key6><name>Graayy</name><race>Night Elf</race><level>80</level><guild>Dark Aftermath</guild><class>Priest</class></key6><key7><name>Gyza</name><race>Human</race><level>80</level><guild>Dark Aftermath</guild><class>Paladin</class></key7><key8><name>Sharpclaw</name><race>Night Elf</race><level>80</level><guild>Dark Aftermath</guild><class>Druid</class></key8><key9><name>Bartok</name><race>Night Elf</race><level>80</level><guild>Dark Aftermath</guild><class>Druid</class></key9><key10><name>Sugarbomb</name><level>0</level><class>Mage</class><race>Gnome</race></key10><key11><name>Raigne</name><race>Night Elf</race><level>80</level><guild>Dark Aftermath</guild><class>Hunter</class></key11><key12><name>Pellykin</name><level>0</level><class>Mage</class><race>Gnome</race></key12><key13><name>Sindelle</name><race>Night Elf</race><level>80</level><guild>Dark Aftermath</guild><class>Hunter</class></key13><key14><name>Danarus</name><race>Human</race><level>80</level><guild>Dark Aftermath</guild><class>Warlock</class></key14><key15><name>Darkenknight</name><race>Night Elf</race><level>80</level><guild>Dark Aftermath</guild><class>Death Knight</class></key15><key16><name>Picard</name><race>Human</race><level>80</level><guild>Dark Aftermath</guild><class>Warrior</class></key16><key17><name>Oprah</name><race>Human</race><level>80</level><guild>Dark Aftermath</guild><class>Mage</class></key17><key18><name>Wildmonkey</name><race>Human</race><level>80</level><guild>Dark Aftermath</guild><class>Paladin</class></key18><key19><name>Bank</name></key19><key20><name>Huarang</name><race>Dwarf</race><level>80</level><guild>Dark Aftermath</guild><class>Paladin</class></key20><key21><name>Leoh</name><race>Draenei</race><level>80</level><guild>Dark Aftermath</guild><class>Priest</class></key21><key22><name>Praetora</name><race>Night Elf</race><level>80</level><guild>Dark Aftermath</guild><class>Druid</class></key22><key23><name>Adrana</name><race>Night Elf</race><level>80</level><guild>Dark Aftermath</guild><class>Druid</class></key23><key24><name>Dannii</name><race>Human</race><level>80</level><guild>Dark Aftermath</guild><class>Mage</class></key24><key25><name>Vancleave</name><race>Human</race><level>80</level><guild>Dark Aftermath</guild><class>Warrior</class></key25><key26><name>Ghaleon</name><race>Night Elf</race><level>80</level><guild>Dark Aftermath</guild><class>Druid</class></key26></Attendees><Bosskills><key1><name>The Obsidian Sanctum</name><note>The Obsidian Sanctum</note><time>01/25/09 22:02:07</time><value>0</value><trash>2</trash><attendees><key1>Adrana</key1><key2>Bank</key2><key3>Bartok</key3><key4>Crackalaka</key4><key5>Danarus</key5><key6>Dannii</key6><key7>Darkenknight</key7><key8>Ghaleon</key8><key9>Graayy</key9><key10>Gyza</key10><key11>Huarang</key11><key12>Kayluul</key12><key13>Leoh</key13><key14>Låncelot</key14><key15>Oprah</key15><key16>Pellykin</key16><key17>Picard</key17><key18>Praetora</key18><key19>Raigne</key19><key20>Sharpclaw</key20><key21>Sindelle</key21><key22>Sugarbomb</key22><key23>Tirdal</key23><key24>Trisette</key24><key25>Vancleave</key25><key26>Wildmonkey</key26></attendees></key1><key2><name>Sartharion</name><note>Sartharion</note><time>01/25/09 22:40:34</time><value>0</value><trash>0</trash><attendees><key1>Adrana</key1><key2>Bank</key2><key3>Bartok</key3><key4>Crackalaka</key4><key5>Danarus</key5><key6>Dannii</key6><key7>Darkenknight</key7><key8>Ghaleon</key8><key9>Graayy</key9><key10>Gyza</key10><key11>Huarang</key11><key12>Kayluul</key12><key13>Leoh</key13><key14>Låncelot</key14><key15>Oprah</key15><key16>Pellykin</key16><key17>Picard</key17><key18>Praetora</key18><key19>Raigne</key19><key20>Sharpclaw</key20><key21>Sindelle</key21><key22>Sugarbomb</key22><key23>Tirdal</key23><key24>Trisette</key24><key25>Vancleave</key25><key26>Wildmonkey</key26></attendees></key2></Bosskills><Loot><key1><ItemName>Hyaline Helm of the Sniper</ItemName><Zone>The Obsidian Sanctum</Zone><Class>Armor</Class><eqdkp>usr_web755_3</eqdkp><SubClass>Mail</SubClass><Icon>Interface\Icons\INV_Helmet_18</Icon><Costs>160</Costs><Player>Sindelle</Player><prefix>eqdkp_</prefix><Boss>Sartharion</Boss><ID>40451</ID><Time>01/25/09 22:43:04</Time><ItemLink>[Hyaline Helm of the Sniper]</ItemLink><Quality>4</Quality></key1><key2><ItemName>Council Chamber Epaulets</ItemName><Zone>The Obsidian Sanctum</Zone><Class>Armor</Class><eqdkp>usr_web755_3</eqdkp><SubClass>Mail</SubClass><Icon>Interface\Icons\INV_Shoulder_80</Icon><Costs>120</Costs><Player>Gyza</Player><prefix>eqdkp_</prefix><Boss>Bank</Boss><ID>40438</ID><Time>01/25/09 22:43:26</Time><ItemLink>[Council Chamber Epaulets]</ItemLink><Quality>4</Quality></key2><key3><ItemName>Gauntlets of the Lost Conqueror</ItemName><Zone>The Obsidian Sanctum</Zone><Class>Miscellaneous</Class><eqdkp>usr_web755_3</eqdkp><SubClass>Junk</SubClass><Icon>Interface\Icons\INV_Gauntlets_27</Icon><Costs>120</Costs><Player>Danarus</Player><prefix>eqdkp_</prefix><Boss>Sartharion</Boss><ID>40628</ID><Time>01/25/09 22:45:26</Time><ItemLink>[Gauntlets of the Lost Conqueror]</ItemLink><Quality>4</Quality></key3><key4><ItemName>Gauntlets of the Lost Vanquisher</ItemName><Zone>The Obsidian Sanctum</Zone><Class>Miscellaneous</Class><eqdkp>usr_web755_3</eqdkp><SubClass>Junk</SubClass><Icon>Interface\Icons\INV_Gauntlets_27</Icon><Costs>120</Costs><Player>Dannii</Player><prefix>eqdkp_</prefix><Boss>Sartharion</Boss><ID>40630</ID><Time>01/25/09 22:45:53</Time><ItemLink>[Gauntlets of the Lost Vanquisher]</ItemLink><Quality>4</Quality></key4><key5><ItemName>Large Satchel of Spoils</ItemName><Zone>The Obsidian Sanctum</Zone><Class>Miscellaneous</Class><eqdkp>usr_web755_3</eqdkp><SubClass>Junk</SubClass><Icon>Interface\Icons\INV_Misc_Bag_17</Icon><Costs>0</Costs><Player>Vancleave</Player><prefix>eqdkp_</prefix><Boss>Sartharion</Boss><ID>43346</ID><Time>01/25/09 22:46:58</Time><ItemLink>[Large Satchel of Spoils]</ItemLink><Quality>4</Quality></key5></Loot></key1></Raids></MorgDKP2>

Sorry it is a bit long. Anyway it worked great on your demo page but when I try it in my code it doesn't do anything. It never seems to even call the myRecordHandler function at all. Here is the code:

function myRecordHandler($record)
  {
  echo "<pre>";
   echo ":test";
    print_r($record);
  echo "</pre>";
  }
function xmlstringtoarray($xml) {
echo $xml;
$result = MagicParser_parse("string://".$xml, "myRecordHandler");
if (!$result)
   {
   print MagicParser_getErrorMessage();
   }
}

$xml is the string I posted above and prints properly with the echo $xml; line. But I never see the echo "test" or any record printed?

Thanks for any help these special chars are killing me:(

Submitted by support on Fri, 2009-01-30 09:03

Hi,

I just tried your test code above and it worked fine - although I notice
that there is no actual call to your xmlstringtoarray($xml) function in
the section of code you posted, but I assume that is lower down in your
script. Without that of course, nothing would be displayed.

Regarding utf-8, if the source XML contains utf-8 special characters,
you do need to issue a utf-8 charset header along with your output
in order to ensure that the browser displays the code correctly.

I've included this in the test script which I wrote based on your
code above, which I'll email to you in just a moment...

Cheers!
David.

Submitted by Wagger on Fri, 2009-01-30 21:50

Hmm looks like the old way I was doing it is working fine then. I am trying to update a mysql database with my script and I am getting these errors:

!addnewDuplicate entry 'M?rgnome' for key 2!updatememIllegal mix of collations (latin1_german1_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='!addnewDuplicate entry 'M?rgnome' for key 2!updatememIllegal mix of collations (latin1_german1_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='

So I must somehow need to detect what the website is using as a char set and match it. Thanks for the help.