Hallo!
Hoffe, jetzt bin ich im richtigen Forum.
Habe folgendes Problem mit dem (sehr feinen) AddOn 'Multi File Uploader' in der letzten Version 1.0 (bei jess25©päpke) für REX4.2: http://www.redaxo.de/180-0-addon-detail ... don_id=618
Nach Auswahl von der Medienkategorie und den gewünschten Dateien (in diesem Fall nur Bilder), Eingabe von Titel und Beschreibung funktioniert der Upload einwandfrei.
Sobald der Upload abgeschlossen ist, wechselt der Medienpool zum Reiter 'Medien' und listet die ausgewählte Medienkategorie auf.
Das Ergebnis sieht gut aus bis der Blick über die Umlaut-Zeichen von dem Titel und der Beschreibung streift. Alle Umlaute sind (leider) zerstört.
Was ich alles ausprobiert habe:
- Nachträgliche Ausbesserung über den Medienpool funktioniert einwandfrei
- Hochladen der gleichen Datei mit identischen Titel- und Beschreibungseingabe über 'Medien hinzufügen' funktioniert einwandfrei
- ./files chmod 777
- ./redaxo/include/addons/multiple_uploader/ chmod 777
- Test bei den Umlauten wieder fehlgeschlagen
- Backend Zeichenkodierung von iso-8859-1 auf utf-8 ändern. Cache löschen. Der Upload-Versuch führte zum gleichen, unglücklichen Ergebnis
- Die Datei /redaxo/include/addons/multiple_uploader/pages/uploader.inc.php angesehen, statische Umlautangaben bei Buttons manuell ausgebessert, nur die Datei wirkt (zumindest meiner Meinung nach) fehlerfrei
Die von mir verwendete Arbeitsumgebung klingt wie folgt:
MAMP: 1.8.4
Apache 2.0.63
PHP 5.2.11
MySQL 5.1.37
Wo kann sich hier das Problem verstecken?
Hallo,
Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.
Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.
Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
-
- Beiträge: 3
- Registriert: 21. Apr 2010, 11:30
- Wohnort: Graz
- Kontaktdaten: Website
-
- Beiträge: 4
- Registriert: 6. Mai 2010, 14:13
Multi File Uploader - Problem mit Umlauten
Hi,
das Problem hatte ich auch. Es liegt daran, dass das dahinterliegen Flash Tool uploadify.swf die Dateiname utf-8 kodiert an Redaxo weiter gibt.
Da ich keine Ahnung von Flash hab, kann ich dir nur einen redaxo-seitigen Patch anbieten. Dazu muss in der Datei redaxo/include/functions/function_rex_mediapool.inc.php in der Funktion
gleich hinter der Zeile (83 in der REDAXO Version 4.2.1)
folgendes einfgefügt werden:
Es wird dann geprüft ob der Dateiname utf-8 codierte Zeichen enthält. Gegebenenfalls wird der Dateiname decodiert.
das Problem hatte ich auch. Es liegt daran, dass das dahinterliegen Flash Tool uploadify.swf die Dateiname utf-8 kodiert an Redaxo weiter gibt.
Da ich keine Ahnung von Flash hab, kann ich dir nur einen redaxo-seitigen Patch anbieten. Dazu muss in der Datei redaxo/include/functions/function_rex_mediapool.inc.php in der Funktion
Code: Alles auswählen
function rex_mediapool_saveMedia($FILE, $rex_file_category, $FILEINFOS, $userlogin = null, $doSubindexing = TRUE)
Code: Alles auswählen
$FILENAME = $FILE['name'];
folgendes einfgefügt werden:
Code: Alles auswählen
$FILEENC = mb_detect_encoding($FILENAME);
if ($FILEENC == 'UTF-8' || $FILEENC == 'utf-8'){
$FILENAME = utf8_decode($FILENAME);
}
-
- Beiträge: 3
- Registriert: 21. Apr 2010, 11:30
- Wohnort: Graz
- Kontaktdaten: Website
Re: Multi File Uploader - Problem mit Umlauten
Hi, bernd.kohlmanbernd.kohlman hat geschrieben: ...Code: Alles auswählen
$FILEENC = mb_detect_encoding($FILENAME); if ($FILEENC == 'UTF-8' || $FILEENC == 'utf-8'){ $FILENAME = utf8_decode($FILENAME); }
vielen Dank für diese sehr gute und simple Variante!
Nur mit Dateinamen mit Umlautzeichen arbeitet das Multiupload vom Anfang an fehlerfrei.
Das Problem liegt eigentlich nicht im Dateinamen, sondern in den Meta-Daten (Titel, Beschreibung, Copyright). Genau dort werden die Umlaute "zerstört". Meiner Meinung nach muß sich die Problematik im function_rex_mediapool.inc.php beim Zusammenspiel mit Multiupload-AddOn verstecken?! Uploadify.swf arbeitet nur mit dem Dateinamen - die Metas verarbeitet nach wie vor das Medienpool-Engine? Oder täusche ich mich da?
Beste Grüße,
.may
-
- Beiträge: 4
- Registriert: 6. Mai 2010, 14:13
Hi maybykufferath,
da hatte ich dich wohl falsch verstanden. Bei mir jedenfalls wurden auch die Umlaute der Dateinamen nach "_" erstetzte und nicht wie normal nach "ae", "oe", und "ue".
Das auch die Metadaten verstümmelt ankommen ist mir durch deinen Post erst aufgefallen. Das Problem ist, dass diese Metadaten, warum auch immer, sogar zweifach UTF-8 codiert ankommen.
Um das zu ändern ist folgendes nötig.
1. Von Seiten des MultipleUpload-Addons sollen die Daten nur noch einfach UTF-8 codiert übertragen werden. Am besten wäre natürlich gleich eine ISO-8859-1 Kodierung, aber so wie ich das sehe müsste das Flash seitig geändert werden. Davon hab ich leider keine Ahnung.
2. Von Seiten des Mediapools muss der Dateiname und der Titel UTF-8 decodiert werden.
3. Von Seiten des MetaInfo-Addons mussen alle Metafelder UTF-8 decodiert werden.
zu 1.
Es reicht in der Datei redaxo/include/addons/multiple_uploader/pages/uploader.inc.php die Zeile 157 wie folgt zu ändern:
zu 2. und 3.
Mir fiel auf, dass die PHP Funktion mb_detect_encoding() manchmal fälschlicherweise auch UTF-8 als Kodierung erkennt, selbst wenn ISO-8859-1 Umlaute enthalten sind. Deshalb hab ich noch folgene Funktion in redaxo/include/functions/function_rex_globals.inc.php hinzugefügt, welche ich jetzt immer verwende um zu prüfen, ob noch UTF-8 Zeichen in einem String vorhanden sind.Die Funktion stammt aus einem Post auf der Seite http://www.php.net/manual/de/function.utf8-encode.php.
zu 2.
Es muss in der Datei redaxo/include/functions/function_rex_mediapool.inc.php wieder die Funktion geändert werden.
Um den Dateinamen zu encodieren kommt hinteraus Zeile 83 jetzt
Und für den Titel wird anstelle von
in Zeile 124
eingefügt.
zu 3.
Es muss in der Datei redaxo/include/addons/metainfo/extensions/extension_common.inc.php die Funktion geändert werden.
Dabei wird hinterin Zeile 458
eingefügt.
Wenn du eine elegantere Möglichkeit weißt (z.B. wie man uploadify dazu bringt gleich ISO-8859-1 zu verschicken) sag bescheid.
da hatte ich dich wohl falsch verstanden. Bei mir jedenfalls wurden auch die Umlaute der Dateinamen nach "_" erstetzte und nicht wie normal nach "ae", "oe", und "ue".
Das auch die Metadaten verstümmelt ankommen ist mir durch deinen Post erst aufgefallen. Das Problem ist, dass diese Metadaten, warum auch immer, sogar zweifach UTF-8 codiert ankommen.
Um das zu ändern ist folgendes nötig.
1. Von Seiten des MultipleUpload-Addons sollen die Daten nur noch einfach UTF-8 codiert übertragen werden. Am besten wäre natürlich gleich eine ISO-8859-1 Kodierung, aber so wie ich das sehe müsste das Flash seitig geändert werden. Davon hab ich leider keine Ahnung.
2. Von Seiten des Mediapools muss der Dateiname und der Titel UTF-8 decodiert werden.
3. Von Seiten des MetaInfo-Addons mussen alle Metafelder UTF-8 decodiert werden.
zu 1.
Es reicht in der Datei redaxo/include/addons/multiple_uploader/pages/uploader.inc.php die Zeile 157 wie folgt zu ändern:
Code: Alles auswählen
jQuery('#fileUpload').uploadifySettings('serialize',encodeURIComponent(jQuery("form").serialize()));
Mir fiel auf, dass die PHP Funktion mb_detect_encoding() manchmal fälschlicherweise auch UTF-8 als Kodierung erkennt, selbst wenn ISO-8859-1 Umlaute enthalten sind. Deshalb hab ich noch folgene Funktion in redaxo/include/functions/function_rex_globals.inc.php hinzugefügt, welche ich jetzt immer verwende um zu prüfen, ob noch UTF-8 Zeichen in einem String vorhanden sind.
Code: Alles auswählen
define('_is_utf8_split',5000);
function is_utf8($string) { // v1.01
if (strlen($string) > _is_utf8_split) {
// Based on: http://mobile-website.mobi/php-utf8-vs-iso-8859-1-59
for ($i=0,$s=_is_utf8_split,$j=ceil(strlen($string)/_is_utf8_split);$i < $j;$i++,$s+=_is_utf8_split) {
if (is_utf8(substr($string,$s,_is_utf8_split)))
return true;
}
return false;
} else {
// From http://w3.org/International/questions/qa-forms-utf-8.html
return preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs', $string);
}
}
zu 2.
Es muss in der Datei redaxo/include/functions/function_rex_mediapool.inc.php wieder die Funktion
Code: Alles auswählen
function rex_mediapool_saveMedia(...)
Um den Dateinamen zu encodieren kommt hinter
Code: Alles auswählen
$FILENAME = $FILE['name'];
Code: Alles auswählen
if(is_utf8($FILENAME)){
$FILENAME = utf8_decode($FILENAME);
}
Code: Alles auswählen
$FILESQL->setValue('title',$FILEINFOS['title']);
Code: Alles auswählen
$FILETILTE = $FILEINFOS['title'];
if(is_utf8($FILETILTE)){
$FILETILTE = utf8_decode($FILETILTE);
}
$FILESQL->setValue('title',$FILETILTE);
zu 3.
Es muss in der Datei redaxo/include/addons/metainfo/extensions/extension_common.inc.php die Funktion
Code: Alles auswählen
function _rex_a62_metainfo_handleSave(...)
Dabei wird hinter
Code: Alles auswählen
$saveValue = $postValue;
Code: Alles auswählen
if(is_utf8($saveValue)){
$saveValue = utf8_decode($saveValue);
}
Wenn du eine elegantere Möglichkeit weißt (z.B. wie man uploadify dazu bringt gleich ISO-8859-1 zu verschicken) sag bescheid.
-
- Beiträge: 3
- Registriert: 21. Apr 2010, 11:30
- Wohnort: Graz
- Kontaktdaten: Website
Hallo bernd.kohlman,
später, aber doch melde ich mich wieder.
Erstmal vielen Dank für die feine Lösung - funktioniert wunderbar.
Diese Änderung wird sich aber nur auf den Dateinamen auswirken.
Allerdings werden die Sonderzeichen in den Dateinamen von Redaxo korrekt modifiziert auch in der unveränderten Version von Uploadify.
Ich finde dein systematisches Vorgehen und deine Lösung absolut optimal.
Nochmals vielen Dank!
später, aber doch melde ich mich wieder.
Erstmal vielen Dank für die feine Lösung - funktioniert wunderbar.
Bezüglich einer möglichen Änderung von uploadify... Der Flashplayer arbeitet grundsätzlich in Unicode. Es gibt allerdings die einfache, ältere Möglichkeit, ihn zu "verpflichten" die Codepage des Betriebsystems zu verwenden: System.useCodepage = boolean; Bei Wert true wird ein z. B. ISO-8859-1 kodierter Text vom dem Flash Player im lokalen System korrekt interpretiert. Somit werden auch die Zeichen korrekt versendet. Das sagen auch die Adobe Livedocs zum Thema: http://help.adobe.com/de_DE/Flash/10.0_ ... 808229046Bbernd.kohlman hat geschrieben:Hi maybykufferath,
...
Wenn du eine elegantere Möglichkeit weißt (z.B. wie man uploadify dazu bringt gleich ISO-8859-1 zu verschicken) sag bescheid.
Diese Änderung wird sich aber nur auf den Dateinamen auswirken.
Allerdings werden die Sonderzeichen in den Dateinamen von Redaxo korrekt modifiziert auch in der unveränderten Version von Uploadify.
Ich finde dein systematisches Vorgehen und deine Lösung absolut optimal.
Nochmals vielen Dank!