[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Multi File Uploader - Problem mit Umlauten - REDAXO Forum
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/
maybykufferath
Beiträge: 3
Registriert: 21. Apr 2010, 11:30
Wohnort: Graz
Kontaktdaten: Website

Multi File Uploader - Problem mit Umlauten

22. Apr 2010, 15:16

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?

bernd.kohlman
Beiträge: 4
Registriert: 6. Mai 2010, 14:13

Multi File Uploader - Problem mit Umlauten

7. Mai 2010, 10:50

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

Code: Alles auswählen

function rex_mediapool_saveMedia($FILE, $rex_file_category, $FILEINFOS, $userlogin = null, $doSubindexing = TRUE)
gleich hinter der Zeile (83 in der REDAXO Version 4.2.1)

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);
}
Es wird dann geprüft ob der Dateiname utf-8 codierte Zeichen enthält. Gegebenenfalls wird der Dateiname decodiert.

maybykufferath
Beiträge: 3
Registriert: 21. Apr 2010, 11:30
Wohnort: Graz
Kontaktdaten: Website

Re: Multi File Uploader - Problem mit Umlauten

21. Mai 2010, 14:30

bernd.kohlman hat geschrieben: ...

Code: Alles auswählen

$FILEENC = mb_detect_encoding($FILENAME);
if ($FILEENC == 'UTF-8' || $FILEENC == 'utf-8'){
  $FILENAME = utf8_decode($FILENAME);
}
Hi, bernd.kohlman

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

bernd.kohlman
Beiträge: 4
Registriert: 6. Mai 2010, 14:13

28. Mai 2010, 13:20

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:

Code: Alles auswählen

jQuery('#fileUpload').uploadifySettings('serialize',encodeURIComponent(jQuery("form").serialize()));
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.

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); 
    } 
}
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

Code: Alles auswählen

function rex_mediapool_saveMedia(...)
geändert werden.

Um den Dateinamen zu encodieren kommt hinter

Code: Alles auswählen

$FILENAME = $FILE['name'];
aus Zeile 83 jetzt

Code: Alles auswählen

if(is_utf8($FILENAME)){
  $FILENAME = utf8_decode($FILENAME);
}
Und für den Titel wird anstelle von

Code: Alles auswählen

$FILESQL->setValue('title',$FILEINFOS['title']);
in Zeile 124

Code: Alles auswählen

$FILETILTE = $FILEINFOS['title'];
if(is_utf8($FILETILTE)){
  $FILETILTE = utf8_decode($FILETILTE);
}
$FILESQL->setValue('title',$FILETILTE);
eingefügt.

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(...)
geändert werden.
Dabei wird hinter

Code: Alles auswählen

$saveValue = $postValue;
in Zeile 458

Code: Alles auswählen

if(is_utf8($saveValue)){
  $saveValue = utf8_decode($saveValue);
}
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.

maybykufferath
Beiträge: 3
Registriert: 21. Apr 2010, 11:30
Wohnort: Graz
Kontaktdaten: Website

18. Jun 2010, 10:56

Hallo bernd.kohlman,

später, aber doch melde ich mich wieder.
Erstmal vielen Dank für die feine Lösung - funktioniert wunderbar.
bernd.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.
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_ ... 808229046B

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!

Zurück zu „Sonstiges“