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, 15: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 19:18 Uhr) Grund: gelöst
Mit Zitat antworten
  #2 (permalink)  
Alt 04-07-2009, 17: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, 17: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 17:45 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 04-07-2009, 18: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, 18: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, 19: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 19:25
Knowledge Base mickmiller Apps und PHP Script Gesuche 1 20-03-2006 17:56
HTML base-Tag zum Root der Applikation markusschmitt HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 1 23-08-2005 14:54
base Wurzel HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 5 18-03-2005 21:57
Probleme mit Google Script Bernd02 Projekthilfe 7 16-02-2005 23: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

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:03 Uhr.