使用php删除字符串中的未知字符

时间:2017-10-19 06:27:12

标签: php string lumen

我有一个简单的字符串,其值为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;

4 个答案:

答案 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)

因为\ x是带有十六进制代码的字符

所以\ 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);