Domanda


Vado strart con il mio caso d'uso, prima che io ti esplicativi, problema che sto correndo in a.

Sto costruendo un'applicazione mobile utilizzando il framework PhoneGap.
Per questa applicazione ho bisogno di caricare un file (una foto fatta con una macchina fotografica).
Sulla maggior parte delle piattaforme posso ottenere questo ritorno immagine come immagine di base64 codificata.
Posso inviare questo al server, ed è in grado di decodificare e salvarlo. (E fare alcune altre cose funcy come si tratta di un codice QR).

Ora su Symbian, non posso tornare la stringa base64, e posso solo ottenere l'URI per l'immagine. Questo non è un problema, siccome posso usare un XMLHttpRequest per ottenere i dati di immagine e la codifica in Base64 utilizzando javascript.

Questo funziona Methode, ma mi dà un problema.
Il browser Symbian sembra avere un bug. Si tratta di un browser basato su webkit dal 2005 (sì, è quel vecchio, anche sui più recenti telefoni S60).
Il problema è che converte tutti i caratteri che non conosce (non in una tabella utf-8) a 2 byte. Se è ricordare correttamente era tutto sopra 127.

ho cercato di risolvere questo bug utilizzando JavaScript, ma è stato un no go (btw, tela e poi getBinaries o qualcosa del genere non sono supportati come tela 2d non è supportato dal browser).

Quindi, cerco di costruire una soluzione in php per fissare i byte. Questo è ciò che ho in questo momento, anche se non funziona:

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

Questa funzione non funziona per qualche motivo. Ottengo i seguenti avvisi:

  

Attenzione: imagecreatefromstring () [function.imagecreatefromstring]: Dati non è in un formato riconosciuto nel /opt/content/erik/omnicol/HTML/WS/services/qrDecoder/QrDecoder.php sulla linea 98

E io ottenere:

  

Fatal error: livello di annidamento la funzione massimo di '100' raggiunto, abortire! in /opt/content/erik/omnicol/HTML/WS/services/qrDecoder/QrDecoder.php on line 87

Quest'ultimo è abbastanza facile da risolvere, credo, ma penso i'de inviare lo stesso.

Ora, la mia domanda è:
Sono sulla strada giusta?
Come posso risolvere l'avvertimento?

Grazie mille in anticipo,
Erik

P.S. scusa se il mio inglese è male. Io non sono un madrelingua, come io sono olandese.
ps2 Il bug di cui parlavo è questa: http://markmail.org/message/iosbn3rbcgu5k6qt

EDIT: La soluzione per il massimo di 100 profondità è stato più difficile poi ho pensato che sarebbe stato. Così aiuto su questo sarebbe troppo grande.

È stato utile?

Soluzione 2

Non c'era soluzione per questo problema.
Sono passato al lato javascript dell'applicazione per fissare i byte lì.

Altri suggerimenti

Perché stai cercando di creare l'immagine dopo ogni byte? E che cosa è che la ricorsione per? Non puoi semplicemente travolto la stringa e correggere tali doppio byte? Qualcosa di simile a questo:

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

Devi mettere nella stringa già base64 decodificati.

I presume che la linea

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

doveva significare "se c'è un codice di carattere> 127, aggiungere questo e il codice carattere successivo insieme e usarlo come un singolo carattere" e ho pensato che questo approccio è in realtà ciò che si vuole (non possiamo sapere come non conosciamo i dati).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top