Question


Je vais strart avec mon cas d'utilisation, avant que je vais explane le problème que je suis en cours d'exécution pour.

Je construis une application mobile en utilisant le framework PhoneGap.
Pour cette application, j'ai besoin de télécharger un fichier (une image faite avec un appareil photo).
Sur la plupart des plates-formes que je peux obtenir ce retour d'image comme une image codée base64.
Je peux envoyer ce retour au serveur, et il peut le décoder et l'enregistrer. (Et faire quelques autres trucs de funcy comme il est un code QR).

sur symbian, je ne peux pas retourner la chaîne base64, et je ne peux obtenir l'URI à l'image. Ce n'est pas un problème, becouse je peux utiliser un XMLHttpRequest pour obtenir les données d'image et encoder à l'aide de javascript base64.

Cela fonctionne de Methode, mais il me donne un problème.
Le navigateur symbian semble avoir un bug. Il est un navigateur webkit basé à partir de 2005 (oui, c'est ce vieux, même sur les nouveaux téléphones s60).
Le bug est qu'il convertit tous les caractères qu'il ne connaît pas (dans une table utf-8) à 2 octets. Si est de se rappeler correctement, il est tout au-dessus 127.

J'ai essayé de corriger ce bug en utilisant javascript, mais il a été un pas aller (BTW, toile, puis getBinaries ou quelque chose comme ça ne sont pas pris en charge comme toile 2d ne sont pas pris en charge par le navigateur).

Alors, je tente de construire une solution en php pour fixer les octets. Voilà ce que j'ai en ce moment, mais il ne fonctionne pas:

function getValidBin($bin, $offset = 0) {
    $binLength = sizeof($bin);
    for ($i = $offset; $i<=$binLength; $i++) {
        if ($i == $binLength) {
            return false;
        }
        if ($bin[$i] < 127) {

            $binT = $bin[$i] + $bin[$i+1];
            $bin2 = $bin;
            $bin2[$i] = $binT;
            $bin2[$i+1] = null;
            if (imagecreatefromstring($bin2) != false) {
                return $bin2;
            } else {
                $bin3 = getValidBin($bin2, $i);

                if ($bin3 != false) {
                    return $bin3;
                }
            }
        }
    }
}

Cette fonction ne fonctionne pas pour une raison quelconque. Je reçois les avertissements suivants:

  

Attention: imagecreatefromstring () [function.imagecreatefromstring]: Les données ne sont pas dans un format reconnu dans /opt/content/erik/omnicol/HTML/WS/services/qrDecoder/QrDecoder.php en ligne 98

Et je reçois:

  

Erreur fatale: niveau d'imbrication de la fonction maximum de « 100 » atteint, abandon! dans /opt/content/erik/omnicol/HTML/WS/services/qrDecoder/QrDecoder.php sur la ligne 87

Ce dernier assez facile à résoudre, je pense, mais je pense que i'de l'afficher de toute façon.

Maintenant, ma question est:
Suis-je sur la bonne voie?
Comment puis-je résoudre l'avertissement?

Merci beaucoup à l'avance,
Erik

p.s. désolé si mon anglais est mauvais. Je ne suis pas un locuteur natif, comme je suis hollandais.
ps2 Le bug dont je parlais est celui-ci: http://markmail.org/message/iosbn3rbcgu5k6qt

EDIT: La solution pour la profondeur maximum de 100 était plus difficile alors je pensais que ce serait. Donc, aide ce serait bien aussi.

Était-ce utile?

La solution 2

Il n'y avait pas de solution à ce problème.
Je suis passé à côté javascript de l'application pour fixer les octets là.

Autres conseils

Pourquoi essayez-vous de créer l'image après chaque octet? Et qu'est-ce que récursion pour? Tu ne peux pas courir un peu plus de la chaîne et fixer les doubles-octets? Quelque chose comme ceci:

function getValidBin($s) {
    $new_s = '';
    for ($i = 0; $i < strlen($bin) ; $i++)
    {
        $char = $s{$i};
        if (ord($char) > 127)
        {
            $char = chr(ord($char) + ord($s{$i}));
            $i++;
        }
        $new_s .= $char;
    }
}

Vous devez mettre dans la chaîne déjà base64 décodé.

Je suppose que votre ligne

$binT = $bin[$i] + $bin[$i+1];

était censé signifier «s'il y a un code de caractère> 127, ajoutez et le code du caractère suivant ensemble et l'utiliser comme un seul caractère » et je suppose que cette approche est vraiment ce que vous voulez (nous ne pouvons pas savoir comme nous ne savons pas vos données).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top