brauche Webseite ideal für Vereine und Firmen
- Ad -
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! Post your PHP questions here!

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: 165
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: 165
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 Appz und Script Gesuche 1 20-03-2006 16:56
HTML base-Tag zum Root der Applikation markusschmitt HTML, JavaScript, AJAX und CSS 1 23-08-2005 13:54
base Wurzel HTML, JavaScript, AJAX und CSS 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

MariaDB 5.5 veröffentlicht
MariaDB 5.5 veröffentlichtDie freie MySQL-Alternative MariaDB wurde in der stabilen Version 5.5.23 veröffentlicht und soll einige Verbesserungen gegenüber Oracles Communityversion von MySQL mitbringen.

16.04.2012 | Berni

Deutsche Yii Framework Community
Deutsche Yii Framework CommunitySeit dem 19.03.2012 gibt es für die Yii PHP Framework Community ein deutsches Zuhause.

20.03.2012 | dhcomputer

 

Aktuelle PHP Scripte

EM 2012 Tipp-Spiel ansehen EM 2012 Tipp-Spiel

Online Tipp-Spiel zur Fussball Europameisterschaft 2012, basierend auf php-Script mit hinterlegter mySql-Datenbank

27.05.2012 tippimnetz | Kategorie: PHP/ Spiele
Advanced Login ansehen Advanced Login

Login-System und Kundenverwaltung, die sich spielend leicht in bestehende Webseiten einbauen lässt und einen enormen Funktionsumfang bietet. Ihre eigene Webseite muss mit Advanced Login nicht umständlich an ein fertiges System angepasst werden.

25.05.2012 Madden | Kategorie: PHP/ Kundenverwaltung
BROM CMS/BelCal 3 ansehen BROM CMS/BelCal 3

Spezielles CMS für Betreiber von Ferienwohnungen. Komplette Seitenerstellung online, Verwaltung mehrerer Objekte, Reservierungssystem mit sofortigem Abgleich im Belegungskalender und vieles mehr bietet dieses Content Management System.

25.05.2012 belcal2 | Kategorie: PHP/ CMS
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:59 Uhr.