Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 18. Mai 2016 10:19

strubi
hat von CMS/ms gehört
Registriert: 18. Mai 2016
Beiträge: 3

Komische Zeichen in einem Formular

Hallo zusammen
Ich möchte die Metadaten aus einem Bild mit einem Formular bearbeiten. Die Daten sind mit Unicode in den Metadaten der Bilder hinterlegt. Bein Auslesen der Daten konvertiere ich den String in utf-8. Wenn ich nun das Array ausgebe sieht alles wie gewünscht aus. Wenn ich die einzelnen Daten nun aber in einem Formularfeld anzeigen möchte, kommt vor jedem Zeichen ein unbekannten sonderzeichen. Ich poste mal den Code und ein Screenshot. Währe dankbar wenn mir jemand helfen könnte, das Problem zu lösen...

Der Auszug der PHP Datei sieht wie folgt aus:

[== php ==]
// Bild und Pfadangaben            
$bnFile['path']     = '../uploads/images/banner/';
$bnFile['file']     = $params['img'];
$bnFile['img']      = $bnFile['path'].$bnFile['file'];

// Exif Daten laden
$bnFile['exif']      = exif_read_data($bnFile['img'], 'IFD0');
$bnFile['exif']      = utf8_encode($bnFile['exif']['UserComment']);

// Medadaten aufbereiten:
$teileExif              = explode('|', $bnFile['exif']);

// Metadaten in Array sppeichern
if (isset($teileExif[1]) == 'hp-fmg') {
    $bnFile['metaTittle']    = $teileExif[2];
    $bnFile['metaTmbTitle']  = $teileExif[3];
    $bnFile['metaTmpText']   = $teileExif[4];
    $bnFile['metaDatStart']  = $teileExif[5];
    $bnFile['metaDatEnde']   = $teileExif[6];
}
else {
    $bnFile['metaTittle']    = '';
    $bnFile['metaTmbTitle']  = '';
    $bnFile['metaTmpText']   = '';
    $bnFile['metaDatStart']  = '';
    $bnFile['metaDatEnde']   = '';
}

print_r($bnFile);

die Ausgabe aus print_r($bnFile); wird auf der Seite korrekt dargestellt.

Der Code im Template sieht wir folgt aus:

[== smarty ==]
{* Funktionen um Formularfelder zu erstellen*}
{function name='text_input'}
  <div class="pageoverflow">
    <p class="pageinput">
      <label for='{$fld_name}' style='display: inline-block; width: 80px; margin-right:5px;'>{$label_name}:</label>
      <input type="text" class="cms_textfield" name="{$actionid}{$fld_name}" id="{$actionid}{$fld_name}" value="{$value}" style="width:200px;">
      {cms_help title={$label_name} key="bn_{$fld_name}_hlp"}
    </p>
  </div>
{/function}


<div class="pagecontainer">
{form_start}
  {submit_form_buttons}

    {text_input fld_name='metaTittle' label_name=$this->Lang('metaTittle') value=$bn.metaTittle}
    {text_input fld_name='metaTmbTitle' label_name='Thumb Titel' value=$bn.metaTmbTitle}
    {text_input fld_name='metaTmpText' label_name='Thumb Text' value=$bn.metaTmpText}
    {text_input fld_name='metaDatStart' label_name='Startdatum' value=$bn.metaDatStart}
    {text_input fld_name='metaDatEnde' label_name='Enddatum' value=$bn.metaDatEnde}

{form_end}

Die Ausgabe sieht dann wie folgt aus:

cmsms-formularfeler.jpg

Kann mir jemand einen Tipp geben wie ich das Problem lösen kann? Ich bin froh um jeden Tipp!
Herzliche Grüsse
strubi

Beitrag geändert von strubi (18. Mai 2016 10:20)

Offline

#2 18. Mai 2016 21:51

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: Komische Zeichen in einem Formular

Willkommen im Forum!

Mal zur Gegenprobe - werden die unbekannten Zeichen auch dann angezeigt, wenn du das Array, das bei dir ausgelesen wird, manuell erzeugst (also ohne es aus dem Bild auszulesen)?

Offline

#3 20. Mai 2016 15:17

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

Re: Komische Zeichen in einem Formular

Mir fällt da erstmal nur ein kleiner Fehler auf:

// Metadaten in Array sppeichern
if (isset($teileExif[1]) == 'hp-fmg') {

isset() gibt entweder true oder false zurück, aber niemals 'hp-img'.
Es ist mir daher ein Wunder, dass der Teil überhaupt funktioniert.

Wenn die Ausgabe mit print_r() funktioniert aber nicht mit {text_input}, wo glaubst Du sollte man zuerst suchen?

Richtig. Was genau macht {text_input} mit den übergebenen Parametern?


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#4 23. Mai 2016 07:22

strubi
hat von CMS/ms gehört
Registriert: 18. Mai 2016
Beiträge: 3

Re: Komische Zeichen in einem Formular

cyberman schrieb:

Mal zur Gegenprobe - werden die unbekannten Zeichen auch dann angezeigt, wenn du das Array, das bei dir ausgelesen wird, manuell erzeugst (also ohne es aus dem Bild auszulesen)?

Wenn ich den Wert manuell setze, dann erscheint das ganze ganz normal...

[== php ==]
// Metadaten in Array sppeichern
if (isset($teileExif[1])) {
/*    $bnFile['metaTittle']    = $teileExif[2];*/
    $bnFile['metaTittle']    = 'Hallo Du';
    $bnFile['metaTmbTitle']  = $teileExif[3];
    $bnFile['metaTmpText']   = $teileExif[4];
    $bnFile['metaDatStart']  = $teileExif[5];
    $bnFile['metaDatEnde']   = $teileExif[6];
}
else {
    $bnFile['metaTittle']    = '';
    $bnFile['metaTmbTitle']  = '';
    $bnFile['metaTmpText']   = '';
    $bnFile['metaDatStart']  = '';
    $bnFile['metaDatEnde']   = '';
}

Die Ausgabe sieht dann so aus:
cmsms-formularfeler2.jpg

Danke und Gruss
strubi

Beitrag geändert von strubi (23. Mai 2016 08:36)

Offline

#5 23. Mai 2016 08:08

strubi
hat von CMS/ms gehört
Registriert: 18. Mai 2016
Beiträge: 3

Re: Komische Zeichen in einem Formular

NaN schrieb:

Mir fällt da erstmal nur ein kleiner Fehler auf:

// Metadaten in Array sppeichern
if (isset($teileExif[1]) == 'hp-fmg') {

isset() gibt entweder true oder false zurück, aber niemals 'hp-img'.
Es ist mir daher ein Wunder, dass der Teil überhaupt funktioniert.


Jep, habe es nun auch gemerkt. Die Variable gibt lediglich true zurück, den Rest wird ignoriert.

Offline

#6 23. Mai 2016 14:02

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

Re: Komische Zeichen in einem Formular

strubi schrieb:
NaN schrieb:

Mir fällt da erstmal nur ein kleiner Fehler auf:

// Metadaten in Array sppeichern
if (isset($teileExif[1]) == 'hp-fmg') {

isset() gibt entweder true oder false zurück, aber niemals 'hp-img'.
Es ist mir daher ein Wunder, dass der Teil überhaupt funktioniert.


Jep, habe es nun auch gemerkt. Die Variable gibt lediglich true zurück, den Rest wird ignoriert.

Jetzt weiß ich warum es trotzdem funktioniert. PHP ist schwach typisiert. D.h., dass der Text 'hp-img' für PHP gleichbedeutend mit 'true' ist. Dieser Vergleich ist aber unnötig. Das hier sollte schon ausreichen:

Zu Deinem eigentlichen Problem, probier mal folgendes in Deinem PHP-Skript:

...

// Exif Daten laden
$bnFile['exif']      = exif_read_data($bnFile['img'], 'IFD0');
$bnFile['exif']      = utf8_encode($bnFile['exif']['UserComment']);

// Das hier einfügen:
ini_set('mbstring.substitute_character', 'none');
$bnFile['exif']      = mb_convert_encoding($bnFile['exif'], 'UTF-8', 'UTF-8');

...

Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline