v5.dk logo
Kom ind og besøg vores Discord Chat-community
Bliv medlem her eller læs mere om Discord her
Kærlighed kan godt købes for penge
- vi elsker nemlig vores kunder :-)

Mere info Køb nu

Premium på v5.dk
v5.dk logo  v5.dk e-learning
Log på med Facebook
  • Log ind på v5.dk
  • Opret bruger
  • Log ind
  • v5.dk Premium
  • v5.dk Premium
  • Hvad siger vores kunder?
  • E-læring for begyndere
  • icon for WordPress 4 e-learning WordPress 4
  • icon for Office 365 e-learning Office 365
  • icon for Microsoft Word e-learning Microsoft Word
  • Bloggen for alle
  • E-læring for nørder
  • icon for PHP-programmering e-learning PHP-programmering
  • icon for iOS Programmering e-learning iOS Programmering
  • icon for Linux Server e-learning Linux Server
  • Bloggen for nørder
  • Arkiverede videoer
  • Fællesskab
  • Forum
  • Idéer og ønsker
  • Markedspladsen
  • v5.dk Premium
  • Gratis webhotel
  • Cloud-servere
  • Om v5.dk
  • Søg på v5.dk
  • Om v5.dk ApS
    • Om virksomheden
    • RSS-feeds og tjenester
    • Driftsmeddelelser
    • Presse-kit
    • Ledige jobs
    • Social Netværk
      • Facebook
      • Twitter
      • Instagram
    • Alt det andet
      • Forretningsbetingelser
      • Ophavsret og Copyright
  • Kontakt kundeservice
  • FAQ og Hjælp
    • Premium og abb.
    • Videoer og Afspiller
    • Forum og Points
    • Cloud-servers
  • Partner/Virksomhed
  • Partner-kanal
v5.dk logo mobile
  • Menu
  • Opret bruger

XML fejl

  • v5.dk
  • Forum
  • PHP-programmering
  • XML fejl
  • Sidevisninger: 3942 har set dette indlæg
Besvar #0Spørgsmål oprettet af @arlohansen | 1645 points
30 points ude 11 indlæg 7 år siden Spørgsmål besvaret
avatar
 

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>';

 ?>
avatar
 
Besvar#1 @arlohansen kommenterede for 7 år siden

Billede uploadet af arlohansen

avatar
 
Besvar#2 @arlohansen kommenterede for 7 år siden

Det har fungeret før men lige pludselige fungere det ikke mere, er da et hurtig fix til at jeg kan få det til at fungere igen. 

avatar
 
Besvar#3 @arlohansen kommenterede for 7 år siden

Og som en tilføjelse så ser min SQL sådan her ud: 

avatar
 
Besvar#4 @db Admin kommenterede for 7 år siden

Hej 10403 @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 &aelig; &oslash; og &aring; - 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 Bahls Signatur   Daniel Bahl (@db)
   CEO – v5.dk ApS

avatar
 
Besvar#5 @db Admin kommenterede for 7 år siden

Hej 10403 @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 Bahls Signatur   Daniel Bahl (@db)
   CEO – v5.dk ApS

avatar
 
Besvar#6 @arlohansen kommenterede for 7 år siden

Hej Daniel

Jeg siger mange tak for hjælpen, det ville jeg prøve :--)

avatar
 
Besvar#7 @db Admin kommenterede for 7 år siden

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' => '[email protected]æ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 Bahls Signatur   Daniel Bahl (@db)
   CEO – v5.dk ApS

Dette svar er accepteret af OP og tildelt 30 points
avatar
 
Besvar#8 @db Admin svarede for 7 år siden

Og lige et svar, så du kan acceptere svaret, og vi kan lukke spørgsmålet 


Med venlige hilsner

Daniel Bahls Signatur   Daniel Bahl (@db)
   CEO – v5.dk ApS

avatar
 
Besvar#9 @simonpedersen Premium kommenterede for 7 år siden

 #7  Hvad gør & tegnet i linie 4 (Den første kodeblok)

function array_to_xml( $data, &$xml_data ) {

avatar
 
Besvar#10 @dhh Admin kommenterede for 7 år siden

 #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)

avatar
 
Besvar#11 @db Admin kommenterede for 7 år siden

Præcis som 10021 @dhh skriver. Vi arbejder direkte i en defineret variabel, fremfor en kopi af variabelen. 

Som 10021 @dhh 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:

$xml_data = array_to_xml($data, $xml_data);

Smag og behag 


Med venlige hilsner

Daniel Bahls Signatur   Daniel Bahl (@db)
   CEO – v5.dk ApS

Spørgsmålet er besvaret, men du er altid mere end velkommen til at skrive en kommentar!
avatar
 

Du er ikke logget ind

Du skal være logget ind på v5.dk før du kan benytte vores forum. Det er ganske gratis at oprette en bruger.

Opret en ny gratis bruger Log ind

Følger med i denne tråd

arlohansen db

Forum kategorier

  • Generelt
  • Guides & Howto85
  • Offtopic / Andet160
  • Microsoft Office
  • Microsoft Word13
  • Microsoft Excel4
  • Microsoft PowerPoint0
  • Web og hjemmesider
  • Wordpress17
  • Operativsystemer
  • Apple Mac OS X14
  • Apple iOS28
  • Microsoft Windows4
  • Linux16
  • Teknologier
  • Netværk og WiFi3
  • Internet-tjenester9
  • Programmering
  • PHP-programmering125
  • iPhone-/Xcode-programmering9

Aktive forum-tråde lige nu

pentobarbital kaufen ohne rezept
gras kaufen online - grasthc.com
online marketing
Køb juridiske dokumenter såsom kørekort, pas, visum, opholdstilladelse og andre dokumenter
Køb juridiske dokumenter såsom kørekort, pas, visum, opholdstilladelse og andre dokumenter
Weed online kaufen
Er det værd at have en "portfolio"-hjemmeside!?
Fejlkode i form af bip-lyde ved opstart af gammel stationær PC
Bygget med af v5.dk
© Copyright 2006-2023 • Forretningsbetingelser • Copyright • Persondata- og Cookiepolitik
v5.dk ApS - Åbogade 15 - 8200 Aarhus N - CVR: 36902833
v5.dk logo
Hej, vi hedder v5.dk og vi laver e-learning på dansk

v5.dk er sat i verden for at gøre teknologi tilgængeligt og anvendeligt for både professionelle og almindelige brugere på alle niveauer.

93 200 555
  Skriv til os
v5.dk bruger cookies til at huske dine indstillinger, livechat samt til statistik
 

Alle vores priser er inkl. moms Sikker SSL-beskyttet forbindelse

Dankort og Visa-Dankort  Visa  Mastercard og Mastercard Junior  Maestro

  • Produkter
  • v5.dk Premium
  • Cloud-servers
  • v5.dk
  • Om v5.dk
  • Kunderne siger
  • Kontakt os
  • Presse
  • Stay updated
  • RSS & tjenester
  • Søg på v5.dk
  • Sitemap