XML fejl

Hej
Jeg har noget gammel kode, hvor jeg får noget XML error, jeg har dette er min sitemap.php samt har jeg vedhæftet et screenshot af den fejl jeg får.
<?php
$f1=$_GET['f1'];
$f2=$_GET['f2'];
// Laver en MYSQL Connect
mysql_connect("", "", "") or die(mysql_error());
mysql_select_db("") or die(mysql_error());
header ("content-type: text/xml");
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
';
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
';
// Henter from Seoord og laver random
$result = mysql_query("select ordurl from seoord where kolonne1=1") or die(mysql_error());
$result2 = mysql_query("select ordurl from seoord where kolonne2=1") or die(mysql_error());
$i = 0;
while($row = mysql_fetch_array( $result ))
{
$f1 = $row['ordurl'];
mysql_data_seek($result2 , 0 );
while($row2 = mysql_fetch_array( $result2 ))
{
$f2 = $row2['ordurl'];
if($i==0)
echo '<url xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
';
else
echo '<url>
';
echo ' <loc>http://www.v5.dk/'.utf8_decode($f1).'/'.utf8_decode($f2).'/</loc>
';
echo ' <lastmod>2010-12-03T10:22:49+01:00</lastmod>
';
echo '</url>
';
$i = 1;
}
}
echo '</urlset>';
?>

Hej @arlohansen
Jeg har kigget lidt på dit indlæg, fejl-beskeden og din XML-kode.
Det som skyldes problemet er at dine danske karakter som æ, ø og å bliver konverteret til æ ø og å - og det dur ikke i XML-standarden og giver derfor denne fejl:
error on line 12880 at column 41: Entity 'oslash' not defined
Hvis fejlen pludselig er opstået, kan det skyldes at ud ikke tidligere har nogle URLs med æøå i?
Fejlen opstår fordi du konverterer dit tegnsæt fra UTF-8 til ISO-8859-1 i dine URLs. Det gør du vha. uft8_decode()-funktionen.
Kan du prøve at fjerne funktioner fra din URLs, dvs. din <loc> som ser sådan her ud nu:
# Fjernelse af uft8_decode:
echo '<loc>https://v5.dk/' . $f1 . '/' . $f2 . '/</loc>';
Nu ved jeg ikke hvilket tegnsæt din ordurl er gemt under, i så fald det ikke virker at fjerne utf8_decode-funktionen, kan du evt. prøve at tvinge en utf8-encoding ved at ændre utf8_decode() til utf8_encode() rundt om din $f1 og $f2.
Håber dette hjælper dig videre :-) Og håber du får en skøn lørdag aften.
Med venlige hilsner Daniel Bahl (@db)
CEO – v5.dk ApS

Hej @arlohansen
Jeg er glad for vi fik løst problemet, tak for opdateringen på Live Chatten.
Lige for at runde denne tråd af, så er den måde du laver XML på lidt "forældet" måde, omend det virker, findes der i dag en række funktioner i PHP der at gøre det hårde arbejde for dig, bl.a. SimpleXML.
Lad mig kort give dig en demo af hvordan den virker.
Kort fortalt laver den et PHP-array om til XML-kode:
<?php
$test_array = array (
'Daniel' => 'navn',
'CEO' => 'titel',
'et_andet_array' => array (
'v5.dk ApS' => 'arbejdsplads',
),
);
$xml = new SimpleXMLElement('<root/>');
array_walk_recursive($test_array, array ($xml, 'addChild'));
print $xml->asXML();
Giver følgende resultat:
<?xml version="1.0"?>
<root>
<navn>Daniel</navn>
<titel>CEO</titel>
<arbejdsplads>v5.dk ApS</arbejdsplads>
</root>
Med venlige hilsner Daniel Bahl (@db)
CEO – v5.dk ApS

Og hvis dit array indeholder flere dimensioner, er her en funktion (array_to_xml) som kan løse dette problem:
<?php
// Funktion der konvertere et multidimensionelt array til XML
function array_to_xml( $data, &$xml_data ) {
foreach( $data as $key => $value ) {
if( is_array($value) ) {
if( is_numeric($key) ){
$key = 'item'.$key; //dealing with <0/>..<n/> issues
}
$subnode = $xml_data->addChild($key);
array_to_xml($value, $subnode);
} else {
$xml_data->addChild("$key",htmlspecialchars("$value"));
}
}
}
// Vores data
$data = array (
'Navn' => 'Daniel Bahl',
'Arbejdsplads' => 'v5.dk ApS',
'Kontaktdata' => array (
'E-mail' => 'daniel@gætselvdomænet.dk',
'Telefon' => '93200555'
),
);
// Nyt objekt af SimpleXMLElement
$xml_data = new SimpleXMLElement('<?xml version="1.0"?><data></data>');
// Kalder vores funktion med data og SimpleXMLElement-objekt
array_to_xml($data,$xml_data);
// Output vores code
echo $xml_data->asXML();
Resultat:
<?xml version="1.0"?>
<data>
<Navn>Daniel Bahl</Navn>
<Arbejdsplads>v5.dk ApS</Arbejdsplads>
<Kontaktdata>
<E-mail>[email protected]</E-mail>
<Telefon>93200555</Telefon>
</Kontaktdata>
</data>
Med venlige hilsner Daniel Bahl (@db)
CEO – v5.dk ApS

#9
Det er en form for reference. Det bliver meget teknisk. Men lad mig tage en bid ud af PHP dokumentationen lige her:
/*
* You can pass a variable by reference to a function so the function
* can modify the variable. The syntax is as follows:
*/
<?php
function foo(&$var)
{
$var++;
}
$a=5;
foo($a);
// $a is 6 here
?>
Kilde: http://www.php.net/manual/en/language.references.pass.php
I det overstående eksempel vil variablen "$a" blive sat til "5".
Og da vi så køre funktionen foo(&$var) med foo($a) - vil den derfor bliver adderede +1 uden brug af en return statement. Jeg håber at det giver mening, det er et meget svært emne at forklare.
En anden måde at forklare det på, er fra StackOverFlow brugeren Krish R:
"You are assigning that array value by reference.
passing argument through reference (&$) and by $ is that when you pass argument through reference you work on original variable, means if you change it inside your function it's going to be changed outside of it as well, if you pass argument as a copy, function creates copy instance of this variable, and work on this copy, so if you change it in the function it won't be changed outside of it
Ref: http://www.php.net/manual/en/language.references.pass.php"
Kilde: http://stackoverflow.com/a/20419640
Med andre ord, du arbejder på den originale variable helt under "motoren." Så du laver ikke først en kopi og sætter en kopi tilbage i en variable, med eksempelvis en return $variable fra en funktion.
Det er meget advanceret - og du bruger det ikke så tit. Men jeg håber at det gav dig lidt info.
Man bruger tit referencer i andre kodesprog, såsom C#. (Efter hvad jeg ved af.)
Med venlige hilsner
Daniel H. Hemmingsen (@dhh)

Præcis som
skriver. Vi arbejder direkte i en defineret variabel, fremfor en kopi af variabelen. @dhh
Som
også nævner, kunne vi opnå samme resultat ved at indsætte en return $xml_data; nederst i vores funktion, og så ændre vores kald til: @dhh
$xml_data = array_to_xml($data, $xml_data);
Smag og behag
Med venlige hilsner Daniel Bahl (@db)
CEO – v5.dk ApS