在解释我遇到的问题之前,我将从我的用例开始。
我正在使用 phonegap 框架构建一个移动应用程序。
对于这个应用程序,我需要上传一个文件(用相机制作的图片)。
在大多数平台上,我可以将此图像作为 base64 编码图像取回。
我可以将其发送回服务器,它可以对其进行解码并保存。(并做一些其他有趣的事情,因为它是一个二维码)。
现在在 symbian 上,我无法取回 base64 字符串,只能获取图像的 URI。这不是问题,因为我可以使用 xmlhttprequest 来获取图像数据并使用 javascript 将其编码为 base64。
这种方法有效,但它给了我一个问题。
symbian 浏览器似乎有一个错误。它是 2005 年推出的基于 webkit 的浏览器(是的,它已经那么老了,即使在最新的 s60 手机上也是如此)。
错误在于它将所有它不知道的字符(不在 utf-8 表中)转换为 2 个字节。如果没记错的话,它是127以上的一切。
我曾尝试使用 javascript 修复此错误,但这是不行的(顺便说一句,不支持 canvas 和 getBinaries 或类似的东西,因为浏览器不支持 canvas 2d)。
所以,我尝试在 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]:第 98 行 /opt/content/erik/omnicol/HTML/WS/services/qrDecoder/QrDecoder.php 中的数据不是可识别的格式
我得到:
致命错误:达到“100”的最大函数嵌套级别,正在中止!在第 87 行的 /opt/content/erik/omnicol/HTML/WS/services/qrDecoder/QrDecoder.php
最后一个很容易解决,我想,但我想我还是会发布它。
现在,我的问题是:
我在正确的轨道上吗?
我该如何解决警告?
非常感谢,
埃里克
ps对不起,如果我的英语不好。我不是母语人士,因为我是荷兰人。
ps2 我所说的错误是这个: http: //markmail.org/message/iosbn3rbcgu5k6qt
编辑:最大 100 深度的解决方案比我想象的要难。所以这方面的帮助也会很棒。