I have created this php script, to create an xml-file from my database:
<?php
header("Content-type: text/xml");
header("Expires: Mon, 26 Jul 1990 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
$host = "localhost";
$user = "root";
$pass = "root";
$database = "flexapp";
$charToReplace = array("é", "è", "ê");
$charReplacements = array("e", "e", "e");
$linkID = mysql_connect($host, $user, $pass) or die("Could not connect to host.");
mysql_select_db($database, $linkID) or die("Could not find database.");
$query = "SELECT * FROM artists";
$artist_result = mysql_query($query, $linkID) or die("Data not found.");
$xml_output = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$xml_output .= "<artists>\n";
for($x = 0 ; $x < mysql_num_rows($artist_result) ; $x++){
$itemrow = mysql_fetch_assoc($artist_result);
$xml_output .= "\t<artist>\n";
$xml_output .= "\t\t<id>" . $itemrow['pk_artist_id'] . "</id>\n";
$itemrow['artist_name'] = str_replace($charToReplace, $charReplacements, $itemrow['artist_name']);
$xml_output .= "\t\t<name>" . $itemrow['artist_name'] . "</name>\n";
$xml_output .= "\t\t<picture>" . $itemrow['artist_pic'] . "</picture>\n";
$xml_output .= "\t\t<twitter>" . $itemrow['artist_twitter'] . "</twitter>\n";
$xml_output .= "\t</artist>\n";
}
$xml_output .= "</artists>\n";
echo $xml_output;
?>
I try to replace characters like é en ê to e.
But it gives this error in the browser:
This page contains the following errors:
error on line 23 at column 9: Encoding error
This is the xml that is outputted:
<?xml version="1.0" encoding="UTF-8"?>
<artists>
<artist>
<id>1155</id>
<name>Have Heart</name>
<picture>http://userserve-ak.last.fm/serve/126/29086375.jpg</picture>
<twitter></twitter>
</artist>
<artist>
<id>1156</id>
<name>Dead Swans</name>
<picture>http://userserve-ak.last.fm/serve/126/4781939.jpg</picture>
<twitter></twitter>
</artist>
<artist>
<id>1157</id>
<name>Nirvana</name>
<picture>http://userserve-ak.last.fm/serve/126/3991355.jpg</picture>
<twitter></twitter>
</artist>
<artist>
<id>1158</id>
<name>Touchter>
</artist>
But the last one (the name in the database is Touché Amoré) should be like all the rest, but somehow the strings aren’t being replaced.
This may be an issue with encoding the data before printing. Try using
utf8_encode()andhtmlentities()and then