Seite 1 von 1

PHP-Dummy-Frage ...

Verfasst: Fr 7. Jan 2005, 01:15
von burki
Hi,
auch bei PHP sind meine Kenntnisse aeusserst begrenzt, so dass ich hier (zumindest einer kennt sich hier damit recht gut aus :wink: ) mal nachfragen muss:
Fuer mein Projekt benutze ich als Billgiclient einen Pinnacle ShowCenter, der einen recht fehlerbehafteten Browser sein Eigen nennt.
Nun hab ich eine kleine Funktion, die versucht aus Mediafiles (mittels der getID3-Bibliothek) Tags auszulesen:

Code: Alles auswählen

function read_tags ($file)
{
  $getID3 = new getID3;
  if (file_exists ($file))
  {
     $ThisFileInfo = $getID3->analyze($file);
     getid3_lib::CopyTagsToComments($ThisFileInfo);

     $artist = $ThisFileInfo['comments_html']['artist'][0];
     $title = $ThisFileInfo['comments_html']['title'][0];
     $time  = $ThisFileInfo['playtime_string'];
     $bitrate = round($ThisFileInfo['audio']['bitrate'] / 1000);


     if ((empty ($artist)) or (empty ($title)))
     {
          return basename($file);
     }
     else
     {
          $artist = html_entity_decode($artist);
          $title = html_entity_decode($title);

          return "$artist - $title ($time) $bitrate kbps";
     }
  }
  else
  {
      return basename($file);
  }
}
Das Problem liegt nun beim html_entity_decode. Hier wird ja defaultmaessig ISO-8859-1 benutzt und anscheinend versteht der SC-Browser auch nichts anderes (kommt eine warning, wenn ich ISO-8859-12 probiere), so dass aus é (aber nur fuer oggs getestet --> kann durchaus ein bug in der getID3-Lib sein) etwas HTML-maessiges wird, was dann aber (bei meinem Programm) plain ausgegeben wird.
Umlaute machen dagegen keine Probleme und auch É scheint zu gehen :roll: ...
--> was mache ich falsch ?
Gruss
Burkhardt

Re: PHP-Dummy-Frage ...

Verfasst: Fr 7. Jan 2005, 02:16
von Koala
burki hat geschrieben:

Code: Alles auswählen

     $artist = $ThisFileInfo['comments_html']['artist'][0];
     $title = $ThisFileInfo['comments_html']['title'][0];
Du solltest anstelle von 'comments_html' den Inhalt des Keys 'comments' nehmen, da Du mittels

Code: Alles auswählen

          $artist = html_entity_decode($artist);
          $title = html_entity_decode($title);
die entities eh rekonverstierst. PHP hat den klitzekleinen Nachteil, daß es primär auf Latin 1 respektive Latin 9 setzt und nur wenige alternative Zeichensätze akzeptiert (sofern man nicht den Umweg über iconv geht), mit anderen Latin-Zeichensätzen wirst Du bei den "Standardfunktionen" nicht glücklich werden.
Das Problem liegt nun beim html_entity_decode. Hier wird ja defaultmaessig ISO-8859-1 benutzt und anscheinend versteht der SC-Browser auch nichts anderes (kommt eine warning, wenn ich ISO-8859-12 probiere), so dass aus é (aber nur fuer oggs getestet --> kann durchaus ein bug in der getID3-Lib sein) etwas HTML-maessiges wird, was dann aber (bei meinem Programm) plain ausgegeben wird.
Die getid3_lib nutzt intern iconv bzw. einen selbst gestrickten Fallback, so daß auch Latin-Zeichensätze jenseits von 1 und 9 konvertiert werden, html_entitiy_decode() hingegen kann - wie html_entities() - die nicht-Latin-1/9-Zeichen nicht (re)konvertieren, da diese entities gar nicht in der Tabelle enthalten sind.
Wenn Du für die Ausgabe html_entities() einsetzt, werden daher nicht-Latin-1/9-Zeichen abermals maskiert, wodurch das Ampersand des Entities ebenfalls als Entity ausgegeben wird.
Umlaute machen dagegen keine Probleme und auch É scheint zu gehen :roll: ...
Auch é sollte keine Probleme bereiten, weil es wie die Umlaute und É Teil von Latin 1 ist, Probleme können auftauchen, wenn die Zeichen durch numerische Repräsentationen anstelle von Entities ersetzt wurden, diese werden von html_entity_decode() nicht abgedeckt und daher nicht rekonvertiert.

greetings, Keita

Verfasst: Fr 7. Jan 2005, 10:34
von burki
Hi Keita,
ich schrieb ja : PHP-Dummy, d.h. wusste z.B. nicht, dass es auch auch z.B. $ThisFileInfo['comments']['title'][0] ueberhaupt gibt :wink: .
Danke, Gruss
Burkhardt

Trotzdem:
Zitat:
Umlaute machen dagegen keine Probleme und auch É scheint zu gehen Rolling Eyes ...

Auch é sollte keine Probleme bereiten, weil es wie die Umlaute und É Teil von Latin 1 ist, Probleme können auftauchen, wenn die Zeichen durch numerische Repräsentationen anstelle von Entities ersetzt wurden, diese werden von html_entity_decode() nicht abgedeckt und daher nicht rekonvertiert.
wie gesagt, mit obiger Funktion klappte É (aus einer mp3-Datei) aber é (aus einer ogg-Datei) halt nicht ...
Gruss
Burkhardt

Verfasst: Fr 7. Jan 2005, 15:50
von Koala
Hallo burki,
burki hat geschrieben:ich schrieb ja : PHP-Dummy, d.h. wusste z.B. nicht, dass es auch auch z.B. $ThisFileInfo['comments']['title'][0] ueberhaupt gibt :wink: .
ach so, hm... also... :lol: Wenn man den Inhalt von Variablen nicht kennt, sind zwei Funktionen extrem nützlich: var_dump() und var_export(). Erstere gibt wie der Name schon sagt einen ausführlichen Dump des Variableninhalts u.a. mit Angabe der generischen Datentypen aus, letztere gibt den Inhalt in PHP-Notation aus oder - wenn der zweite optionale Paramter zu true evaluiert - zurück.
wie gesagt, mit obiger Funktion klappte É (aus einer mp3-Datei) aber é (aus einer ogg-Datei) halt nicht ...
Ich hab leider keine ogg-Datei, so daß ich das Verhalten nicht evaluieren kann, solltest Du weiterhin Probleme haben, kannst Du mir gerne eine entsprechende Test-Datei samt rebellierendem Skript zuschicken, ich würde der Sache dann auf den Grund gehen.

greetings, Keita

Verfasst: Fr 7. Jan 2005, 17:15
von burki
Hi Keita,
nein, geht schon :wink: ...
Werde trotzdem (wenn der SC tatsaechlich weiterhin ein wichtiger client bei meinem Projekt bleiben sollte) wohl doch eher auf einen JSP-Container setzen (da bin ich wenigstens kein dummy), denn die bis jetzt benutzten libs (es sollen auch noch dynamisch jpegs fuer jeden Titel erzeugt werden) sind mir persoenlich eh etwas zu langsam (wenn der Song z.B. nur 5 sec dauert, wird der user kaum ein Bildchen zu sehen bekommen ...) .
Gruss
Burkhardt