Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#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:
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.433
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
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:
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
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.433
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.
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:
if (isset($teileExif[1])) {
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
Seiten: 1