php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > XML
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


XML Hier passt alles rein, was das Thema XML (XSLT, JSON etc...) betrifft, auch in Verbindung mit PHP

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 13-10-2010, 09:57
calcaneus
 Registrierter Benutzer
Links : Onlinestatus : calcaneus ist offline
Registriert seit: Jul 2010
Beiträge: 7
calcaneus befindet sich auf einem aufstrebenden Ast
Standard XML-Datei CP1252 einlesen, Problem mit € Zeichen

Hallo,

ich habe eine XML-Datei welche ich per Download lokal auf den Server hole.
Diese Datei ist CP1252 encoded und enthält XML-Daten mit Umlauten und u.a. auch € Zeichen. Die XML-Datei auszulesen ist soweit kein Problem, leider habe ich ein Problem an das € Zeichen zu kommen.
Die XML-Daten sollen auf einer Internetseite dargestellt werden welche ein UTF-8 encoding hat. Komischerweise funktionieren die Umlaute problemlos nur das € Zeichen läßt sich nicht darstellen.

Folgende Vorgehensweise habe ich in meinem PHP-Script:
$xmlStr = file_get_contents($xmlUrl); // Datei einlesen
$xmlObj = simplexml_load_string($xmlStr, null, LIBXML_NOCDATA); // Daten als STRING laden und CDATA ignorieren
$arrXml = objectsIntoArray($xmlObj); // eigene Funktion die die Daten von XML in ein mehrdimensionales Array wandelt

Ich habe auch schon "iconv" und "recode_string" usw durchprobiert, leider alles ohne Erfolg.

Hat jemand einen Ansatzpunkt für mich?

Danke schonmal
cal
Mit Zitat antworten
  #2 (permalink)  
Alt 13-10-2010, 11:52
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
Diese Datei ist CP1252 encoded
Wer tut denn auch so was....

1. ist diese CP ein propitäres Win Gedöns
2. ist diese CP älter als das € Zeichen
latin 1 kennt kein €
Von daher wundert es mich nicht, dass sich PHP da etwas schwer tut.



Zitat:
Folgende Zeichen im Bereich der oberen Steuerzeichen 0x80 = € (U20AC) [ ₠ ] (128) - 0x9F (159) sind auf real existierenden Maschinen evtl. nicht als solche dargestellt / darstellbar
Aus: Zeichentabelle CP1252 (Win Latin 1)
__________________
Wir werden alle sterben
Mit Zitat antworten
  #3 (permalink)  
Alt 13-10-2010, 12:22
calcaneus
 Registrierter Benutzer
Links : Onlinestatus : calcaneus ist offline
Registriert seit: Jul 2010
Beiträge: 7
calcaneus befindet sich auf einem aufstrebenden Ast
Standard

seltsamerweise hab ich das € Zeichen aber in der XML-Datei und per Browser ist das Ganze "normal" dargestellt.

Ich blicks grad überhaupt nicht mehr
Mit Zitat antworten
  #4 (permalink)  
Alt 13-10-2010, 14:08
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

die MBString-Funktionen unterstützen sowohl Win1252 als auch UTF-8. Die kannst du zum Konvertieren benutzen.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #5 (permalink)  
Alt 14-10-2010, 09:10
calcaneus
 Registrierter Benutzer
Links : Onlinestatus : calcaneus ist offline
Registriert seit: Jul 2010
Beiträge: 7
calcaneus befindet sich auf einem aufstrebenden Ast
Standard

Moin Moin,

mb_... hab ich auch schon alles probiert - langsam zweifel ich echt an mir.
Ich hab rausgefunden, dass die Funktion "get_object_vars" anscheinend was damit zu tun hat. Wenn ich hier das encoding checke bekomme ich "ASCII" dummerweise läßt sich das nicht auf UTF-8 konvertieren.

Ich poste hier mal die Funktion die mir aus dem XML ein Array macht:
PHP-Code:
function objectsIntoArray($arrObjData$arrSkipIndices = array())
{
    
$arrData = array();
   
    
// if input is object, convert into array
    
if (is_object($arrObjData)) {
        
$arrObjData get_object_vars($arrObjData);
    }
   
    if (
is_array($arrObjData)) {
        foreach (
$arrObjData as $index => $value) {
                if (
is_object($value) || is_array($value)) {
                    
$value objectsIntoArray($value$arrSkipIndices); // recursive call
                
}
                if (
in_array($index$arrSkipIndices)) {
                    continue;
                }
                
$arrData[$index] = $value;
        }
    }
    return 
$arrData;

Die XML wird ganz normal eingelesen:

PHP-Code:
$xmlStr file_get_contents($datafile);
$xmlObj simplexml_load_string($xmlStrnullLIBXML_NOCDATA);
$arrXml objectsIntoArray($xmlObj); 
Und dann läuft eine Schleife darüber und ließt die Inhalte aus:

PHP-Code:
for($x 0$x count($arrXml['product']); $x++) {
    if(
$arrXml['product'][$x]['@attributes']['hot'] > OR
     (
$arrXml['product'][$x]['@attributes']['hot'] < 11 AND 
     
$arrXml['product'][$x]['@attributes']['hot'] != 0)) {

        
// $angebotArr[] = $arrXml['product'][$x];
        
        
if($x == 0) {
            
$ausgabe .= '<tr>';
            
$ausgabe .= '<td valign="top">';
        } else {
            
$ausgabe .= '<td valign="top">';
        }
        
        
$ausgabe .= '<a href="'.$arrXml['product'][$x]['deeplink']['@attributes']['path'].'" target="_top">';
        
$ausgabe .= $arrXml['product'][$x]['title'].'</a><br>';
        
$ausgabe .= '<a href="'.$arrXml['product'][$x]['deeplink']['@attributes']['path'].'" target="_top">
    <img src="'
.$arrXml['product'][$x]['image']['@attributes']['path'].'" border="0">
    </a><br>'
.$arrXml['product'][$x]['description'].'<br><hr>';
        
        if(
$x == 0) {
            
$ausgabe .= '</td>';
        } else {
            
$ausgabe .= '</td>';
            
$ausgabe .= '</tr>';
        }
        
    }
}

$ausgabe .= '</table>';
echo 
$ausgabe

Geändert von calcaneus (14-10-2010 um 10:54 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 14-10-2010, 09:55
Wyveres
 Registrierter Benutzer
Links : Onlinestatus : Wyveres ist offline
Registriert seit: Dec 2006
Ort: Rügen
Beiträge: 763
Blog-Einträge: 2
Wyveres ist zur Zeit noch ein unbeschriebenes Blatt
Wyveres eine Nachricht über ICQ schicken
Standard

Bitte brich den Quellcode um!
__________________
Bitte Beachten.
Foren-Regeln
Danke
Mit Zitat antworten
  #7 (permalink)  
Alt 14-10-2010, 10:53
calcaneus
 Registrierter Benutzer
Links : Onlinestatus : calcaneus ist offline
Registriert seit: Jul 2010
Beiträge: 7
calcaneus befindet sich auf einem aufstrebenden Ast
Standard

Hier die Lösung:
PHP-Code:
function utf8_array_decode($input)
{
    
$return = array();

    foreach (
$input as $key => $val)
    {
        if( 
is_array($val) )
        {
            
$return[$key] = utf8_array_decode($val);
        }
        else
        {
            
$return[$key] = utf8_decode($val);
        }
    }
    return 
$return;          

Mit Zitat antworten
  #8 (permalink)  
Alt 14-10-2010, 11:52
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Wundert mich jetzt, dass das schon reicht. utf8_decode gibt dir doch eine Latin-1-Zeichenkette zurück. Ich hatte dich aber so verstanden, dass du CP1252 hast/brauchst. Die beiden sind sich zwar sehr ähnlich aber nicht gleich.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
TXT-Datei einlesen werny PHP Developer Forum 4 12-02-2009 13:37
Datei einlesen sunshine-live PHP Developer Forum 9 07-02-2006 16:53
xml-Datei einlesen DietmarBr XML 3 12-10-2005 14:31
problem beim einlesen einer txt datei copra5 PHP Developer Forum 10 14-08-2005 18:20
Datei einlesen Flashfactor PHP Developer Forum 3 04-11-2002 15:39

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:04 Uhr.