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

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

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


 

Aktuelle PHP Scripte

EJS TreeGrid ansehen EJS TreeGrid

EJS TreeGrid is DHTML component written in pure JavaScript to display and edit data in table, grid, tree view or grid with tree on HTML page

09.04.2019 coqsoft@ | Kategorie: JAVASCRIPT/ Components
Suchmaschine redaktionell, Branchenportal zum Geld verdienen

Programmbeschreibung Die Bezahl-Suchmaschine ist in Perl und PHP programmiert (eigenes CGI-Verzeichnis notwendig), benötigt PHP aber keine MySQL-Datenbank. Webmaster haben mit dieser Suchmaschine neben der normalen kostenlosen Registrierung von Lin

06.04.2019 skripte@ | Kategorie: PHP/ Suchmaschinen
Oog Photo-Video-Gallery

Mit Oog Photo-Gallery können Sie einfach und stilvoll Bilder (auch Video & Audio) auf Ihrem PHP5-Webserver veröffentlichen und verwalten. Lizenz: GNU GPL v2

06.04.2019 trottbrand@ | Kategorie: PHP/ Bilder
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:01 Uhr.