我有一个简单的字符串,其值为this。 其价值来自生物识别提取器
$name = "~DeviceName=TX628\x00";
我使用此代码来消除多余的字符:
$x = trim($name, '~DeviceName=');
$deviceName = trim($x, '\x00');
但它只删除 ~DeviceName =
$deviceName="TX628\x00"
当我 var_dump 时,它有一个6字符串值但它应该是5个字符串值。
string(6) "TX628"
谢谢你的回答。以下代码适用于我的问题。
$name = "~DeviceName=TX628\x00";
$x = trim($name, '~DeviceName=');
$deviceName = preg_replace('/[\x00-\x1F\x7F-\xFF]/', '', $x);
//$deviceName = TX628;
答案 0 :(得分:2)
您的代码不起作用的原因是\x00
函数的trim
参数是单引号,而不是双引号,即以下内容将起作用
$name = "~DeviceName=TX628\x00";
$x = trim($name, '~DeviceName=');
$deviceName = trim($x, "\x00");
请注意,trim
不应该用于删除字符串,而只是用于选择字节。如果设备名称例如为DX628
,则结果仅为X628
,因为第一个trim
也会删除初始D
字节。
要从另一个字符串的开头安全地删除字符串,您应该使用例如preg_replace
。
答案 1 :(得分:1)
使用此选项删除不可打印的字符
$string = preg_replace( '/[^[:cntrl:]]/', '',$string);
答案 2 :(得分:1)
所以\ x00为零所以"\x00" == "\0"
您可能在名称或修剪
中有十六进制字符串你应该在两者中都有正常的字符串,在
中都应该是十六进制为什么不尝试使用双重逃脱。所以:
$deviceName = trim($x, '\\x00');
从php docs中读取: php escape sequence..
答案 3 :(得分:0)
@CommandHandler
这似乎很容易,但我付出了一些努力。所以这是你的解决方案。它应该返回5。 \ x00被命名为“控制字符”,因此下次遇到此问题时,请查找此标记以查看存在哪些其他控制字符,以便以相同的方式替换它们。
输出为:<?php
$name = "~DeviceName=TX628\x00";
$x = trim($name, '~DeviceName=');
$x=preg_replace('/[\x00-\x1F\x7F]/', '', $x);
var_dump ($x);