尝试扫描UPS Maxicode而不会丢失不可见的特殊字符

时间:2014-12-19 08:29:45

标签: html forms scanning

我有以下任务:允许将UPS Maxicode扫描到webform并使用PHP进行解析。 我的设备是USB连接的2D成像仪“Motorola Symbol DS3508”被检测为“键盘” - 替换。

我的问题:如果我将maxicode扫描到HTML网络表单(文本或文本区域)中,则会删除特殊的隐藏字符。如果 - 相反 - 我使用相同的扫描仪和未更改的设置将maxicode扫描到Notepad ++中,它们将被保留。尝试将字符串从Notepad ++复制到相同的html webform并通过post提交工作正常,特殊字符将被保留并可以使用PHP进行检测/解析。

问题:如果让HTML网络表单在成像器扫描期间保留这些特殊字符,而不必先扫描到Notepad ++,然后复制/粘贴到webform中,我该怎么办?

非常感谢任何想法。

这是我的php / html代码片段

<?php 
if (!isset($_POST['maxicode']))
{ ?>
    <form action="<?echo $self;?>" method="post">
        <input type="textarea" charset="UTF-8" name="maxicode" placeholder="Scan Maxicode here" required />
        <input type="submit" name="submit" value="Submit">
    </form>
<? } 
else {
    //$maxicode="[)>01960680  5780661Z58416520UPSN8DDD5E0421/15NOSLO";
    $maxicode=$_POST['maxicode'];
    echo $maxicode."<br>";
    $mc=explode ("", $maxicode);
    print_r($mc);
} ?>

作为一个例子:这是在Notepad ++中扫描的样子 Scan code

1 个答案:

答案 0 :(得分:0)

我认为问题是在POST请求中无法传输不可打印的字符。解决方案是在传输表单之前使用JavaScript对包含不可打印字符的字符串进行编码,然后在到达serever后再对其进行解码。

像这样的东西

// Catch that the form is being submitted
var codeInput = document.getElementById("codeInput");
var unescapedCode = codeInput.value;

// Replace content with replaced text
codeInput.innerHTML = encodeURIComponent(unescapedCode);

我做了一个例子here。我用十六进制编辑器在字符串中插入了不可打印的字符。

然后你要做的就是在服务器上再次解码它(例如使用PHP)。

$code = urldecode($_POST["codeInput"]);

现在应该包含不可打印的字符。