我有以下任务:允许将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 ++中扫描的样子
答案 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"]);
现在应该包含不可打印的字符。