私が直面している問題を説明する前に、私のユースケースから始めます。
phonegap フレームワークを使用してモバイル アプリケーションを構築しています。
このアプリケーションでは、ファイル (カメラで作成した写真) をアップロードする必要があります。
ほとんどのプラットフォームでは、このイメージを base64 でエンコードされたイメージとして取得できます。
これをサーバーに送り返すと、デコードして保存できます。(QRコードなので、他のいくつかの機能を実行します)。
現在、シンビアンでは、base64 文字列を取得できず、画像への URI しか取得できません。xmlhttprequest を使用して画像データを取得し、javascript を使用して base64 にエンコードできるため、これは問題ではありません。
このメソッドは機能しますが、問題が発生します。
symbian ブラウザにはバグがあるようです。これは 2005 年の Webkit ベースのブラウザーです (そうです、最新の s60 フォンでも、それほど古いものです)。
バグは、(utf-8 テーブルにない) 知らないすべての文字を 2 バイトに変換することです。記憶が正しければ、すべてが 127 以上でした。
javascript を使用してこのバグを修正しようとしましたが、うまくいきませんでした (キャンバス 2d はブラウザーでサポートされていないため、キャンバスと getBinaries などはサポートされていません)。
そのため、バイトを修正するためにphpで回避策を構築しようとしています。これは私が今持っているものですが、機能していません:
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;
}
}
}
}
}
この機能は何らかの理由で機能していません。次の警告が表示されます。
警告: imagecreatefromstring() [function.imagecreatefromstring]: /opt/content/erik/omnicol/HTML/WS/services/qrDecoder/QrDecoder.php の 98 行目のデータが認識される形式ではありません
そして私は得る:
致命的なエラー: 関数の最大ネスト レベル '100' に達しました。中止します! /opt/content/erik/omnicol/HTML/WS/services/qrDecoder/QrDecoder.php の 87 行目
この最後の問題は非常に簡単に解決できると思いますが、とにかく投稿すると思います。
さて、私の質問は次のとおりです。
私は正しい軌道に乗っていますか?
警告を解決するにはどうすればよいですか?
よろしくお願いします、
エリック
ps私の英語が下手ならごめんなさい。私はオランダ人なので、ネイティブスピーカーではありません。
ps2 私が話していたバグはこれです: http://markmail.org/message/iosbn3rbcgu5k6qt
編集: 最大 100 の深さのソリューションは、思ったよりも困難でした。そのため、それに関するヘルプも素晴らしいでしょう。