Fachkundige und individuelle Beratung ist für uns selbstverständlich - rufen Sie uns an!
Sie erreichen unsere Hotline werktags von 10:00 bis 18:00 Uhr unter der 07171 8712 0 (Samstags: 10:00 bis 12:00 Uhr). Außerhalb Deutschlands wählen Sie +49 7171 87120. Im Dialog finden wir die optimale Klanglösung für Sie und klären etwaige Fragen oder Schwierigkeiten. Das nuForum ist seit dem 19. Juli 2023 im read-only-Modus: Das Ende einer Ära: Das nuForum schließt

PHP-Dummy-Frage ...

Hier dreht es sich um (fast) alles...
Antworten
burki

PHP-Dummy-Frage ...

Beitrag 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
Benutzeravatar
Koala
Star
Star
Beiträge: 5193
Registriert: Mo 12. Jan 2004, 12:49
Wohnort: Bielefeld

Re: PHP-Dummy-Frage ...

Beitrag 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
burki

Beitrag 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
Benutzeravatar
Koala
Star
Star
Beiträge: 5193
Registriert: Mo 12. Jan 2004, 12:49
Wohnort: Bielefeld

Beitrag 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
burki

Beitrag 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
Antworten