php-resource



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

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 04-07-2009, 14:57
francosdad
 Registrierter Benutzer
Links : Onlinestatus : francosdad ist offline
Registriert seit: Mar 2009
Beiträge: 80
francosdad ist zur Zeit noch ein unbeschriebenes Blatt
Standard [gelöst] Google Base API, Probleme beim Encoding

Hallo,

ich stehe vor folgendem Problem.

Für meinen Webshop habe ich eine Schnittstelle zur Google Base API geschrieben, welche auch einwandfrei funktioniert.

Bei manchen Artikeln scheinen aber soviele Sonderzeichen bzw. sonstige HTML Formatierungen drin zu sein, dass ich folgende Fehlermeldung bekomme:

Code:
<error type="data" field="description" reason="There is a problem with the character encoding of this attribute." /> </errors>
Ich habe versucht mit folgendem Code eigentlich die Beschreibung so gut wie von allem zu befreien und als UTF-8 zu übertragen, aber anscheinend bleiben halt bei einigen Artikeln Rückstände zurück:

PHP-Code:
    $tags '<p><a><br><br /><table><tr><td><ul><ol><li><img><center><h1><h2><h3><div>'
    
$content utf8_encode(    
            
html_entity_decode(    
                
str_replace('&nbsp;'''
                    
strip_tags(
                        
preg_replace('/\<(i|p|span|font)\s.*?\>/im''<\1>'
                            
stripslashes($products_array[$i]['products_description']
                                )
                            ), 
                        
$tags)
                    )
                )
            ); 
Hat jemand noch eine Idee wie ich den String bis auf den eigentlichen Text bereinigen kann?

Leider bekomme ich von der Google API keine konkrete Fehlerbeschreibung, um welches Zeichen es sich konkret handelt, was er bemängelt.

Zusammenfassend ist zu sagen, dass ich einen UFT-8 validen String brauche.

Oder hat auch jemand eine Idee wo man einen String auf UTF-8 Validität prüfen kann?

Vielen Dank und Grüße
Michael

Geändert von francosdad (04-07-2009 um 18:18 Uhr) Grund: gelöst
Mit Zitat antworten
  #2 (permalink)  
Alt 04-07-2009, 16:24
Benutzerbild von mermshaus mermshaus
 Registrierter Benutzer
Links : Onlinestatus : mermshaus ist offline
Registriert seit: Jun 2009
Beiträge: 451
mermshaus wird schon bald berühmt werden
Standard

Hallo.

Eigentlich sollte utf8_encode() alles passend kodieren. Bist du dir sicher, dass du die Daten auch mit einem passenden Charset im Header absendest?

Ansonsten würde ich um konkretere Informationen bzw. ein konkretes Beispiel bitten.

Gruß Marc

PS: Einen String auf UTF8-Validität zu prüfen, ist nicht sonderlich schwierig. Aber dazu sollte sich was googlen lassen. Ich sehe allerdings nicht, wieso utf8_encode() nicht ausreichen sollte, um das zu gewährleisten.
Mit Zitat antworten
  #3 (permalink)  
Alt 04-07-2009, 16:41
francosdad
 Registrierter Benutzer
Links : Onlinestatus : francosdad ist offline
Registriert seit: Mar 2009
Beiträge: 80
francosdad ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Ich sehe allerdings nicht, wieso utf8_encode() nicht ausreichen sollte, um das zu gewährleisten.
Ich auch nicht.

Das Problem ist, dass die ganze API auf UTF-8 eingestellt ist, d.h. sie akzeptiert keine keine andere Codierung.

Das ganze wird über das GDATA Framework von Zend gelöst und arbeitet mittels SOAP, soweit wie ich das erkennen kann und da kann ich eben keinen header mitsenden.

Das ganze läuft wie folgt ab:

PHP-Code:
    $token getToken();
    
$client Zend_Gdata_AuthSub::getHttpClient($token);
    
$service = new Zend_Gdata_Gbase($client);
    
    for (
$i=0$i count($products_array); $i++) {
    print     
$products_array[$i]['products_id']."<br />";
        
$tags '<p><a><br><br /><table><tr><td><ul><ol><li><img><center><h1><h2><h3><div>';
    
$content str_replace('&''&amp;'
            
str_replace('&bdquo;''"'
             
str_replace('&ndash;'''
              
str_replace('&euro;''EUR'
               
utf8_encode(
                
html_entity_decode(
                 
str_replace('&nbsp;'''
                  
strip_tags(
                   
preg_replace('/\<(i|p|span|font)\s.*?\>/im''<\1>'
                
stripslashes($products_array[$i]['products_description'])
                ), 
$tags
                   
)
                  )
                 )
                )
               )
              )
             )
            );

    
$newEntry $service->newItemEntry();

    
// Add the title
    
$newEntry->title $service->newTitle(utf8_encode($products_array[$i]['products_name']));
    
    
// Add the content
    
$newEntry->content $service->newContent($content);
    
$newEntry->content->type 'text';   // specifying a type is recommended
    
    // Define the item type
    
$newEntry->itemType 'products';
    
$newEntry->itemType->type 'text';  // specifying a type is recommended
    
    // Add item-specific attributes
    
$newEntry->addGbaseAttribute('id'$products_array[$i]['products_id'], 'text');
    
$newEntry->addGbaseAttribute('language''de''text');
    
$newEntry->addGbaseAttribute('target_country''DE''text');
    
$newEntry->addGbaseAttribute('Preis'$products_array[$i]['products_price'].' EUR''floatunit');
    
$newEntry->addGbaseAttribute('Gewicht'$products_array[$i]['products_weight'].' kg''floatunit');

    
$createdEntry $service->insertGbaseItem($newEntry$dryRun); 
Die Dokumentation für die API ist auch nicht besonders aussagekräftig.

Tatsache ist, dass er manche Artikel durchlässt und manche nicht.

Grüsse
Michael

Geändert von francosdad (04-07-2009 um 16:45 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 04-07-2009, 17:20
Benutzerbild von mermshaus mermshaus
 Registrierter Benutzer
Links : Onlinestatus : mermshaus ist offline
Registriert seit: Jun 2009
Beiträge: 451
mermshaus wird schon bald berühmt werden
Standard

Habe mal versucht, dir deine $content-Zeile zu entwirren:

PHP-Code:
// stripslashes() an dieser Stelle?
$content stripslashes($products_array[$i]['products_description']));

// Wozu diese Zeile?
$content preg_replace('/\<(i|p|span|font)\s.*?\>/im''<\1>'$content);

$content strip_tags($content,
        
'<p><a><br><br /><table><tr><td><ul><ol><li><img><center><h1><h2><h3><div>');

// Wäre sinnvoller, das vor html_entitiy_decode() zu erledigen
$content str_replace(
        array(
'&nbsp;''&bdquo;''&ndash;''&euro;'), 
        array(
''      '"'      ''       'EUR'   ), $content);

$content utf8_encode($content);

// Nach utf8_encode() wegen der Entities, die nicht in ISO-8859-1 darstellbar
// sind
$content html_entity_decode($contentENT_QUOTES'UTF-8');

$content str_replace('&''&amp;'$content); 
Okay, wenn ich das richtig sehe, enthält $content dann noch HTML-Tags, müsste also im XML (SOAP?) potentiell als CDATA ausgewiesen werden. Ich tippe mal, das macht die Zend-Komponente automatisch, aber ich weiß es nicht. Vielleicht ist Type "text" ungleich Type "cdata" oder so.

Mehr kann ich dazu nicht gesichert sagen, da ich damit noch nicht gearbeitet habe.

Wäre vielleicht eine Idee, die Einträge, die durchgehen, mit denen zu vergleichen, die nicht durchgehen. Aber das hast du vermutlich schon gemacht.
Mit Zitat antworten
  #5 (permalink)  
Alt 04-07-2009, 17:44
francosdad
 Registrierter Benutzer
Links : Onlinestatus : francosdad ist offline
Registriert seit: Mar 2009
Beiträge: 80
francosdad ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke, aber leider ist die Antwort nach wie vor:

Code:
<error type="data" field="description" reason="There is a problem with the character encoding of this attribute." />
Es sind entweder noch weitere Codierungsfehler drin oder ich weiss es nicht, da nach wie vor nur ein paar Artikel übertragen werden.

Die Dokumentation von Zend geht darauf auch nicht ein, nur das es sich um einen Atom Feed handelt und dieser UTF-8 sein muss.

Mit CDATA gehts auch nicht, habe ich gerade versucht und der Fehler ist der selbe.

Gruss
Micha
Mit Zitat antworten
  #6 (permalink)  
Alt 04-07-2009, 18:17
francosdad
 Registrierter Benutzer
Links : Onlinestatus : francosdad ist offline
Registriert seit: Mar 2009
Beiträge: 80
francosdad ist zur Zeit noch ein unbeschriebenes Blatt
Lightbulb

Also, ich scheine es gelöst zu haben.

In der Beschreibung war noch ein formatierter <br /> Tag, quasi <br style="blabla">.
Diesen habe ich mit beseitigt, mittels Ergänzung in
PHP-Code:
$content preg_replace('/\<(i|p|span|font|br)\s.*?\>/im''<\1>'$content); 
Und jetzt läufts durch.

Also vielen Dank und noch ein schönes Wochenende an alle; besonders aber @mermshaus!

Michael
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
encoding, utf-8


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Base Internet Flatrate legt Netzwerk lahm! frankburian Netzwerk & Internet 0 17-01-2008 18:25
Knowledge Base mickmiller Apps und PHP Script Gesuche 1 20-03-2006 16:56
HTML base-Tag zum Root der Applikation markusschmitt HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 1 23-08-2005 13:54
base Wurzel HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 5 18-03-2005 20:57
Probleme mit Google Script Bernd02 Projekthilfe 7 16-02-2005 22:03

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 02:08 Uhr.