当前位置: 首页 > 知识库问答 >
问题:

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

微生弘
2023-03-14

我有一个简单的字符串,它有一个值。这个值来自生物识别提取器

$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;

共有3个答案

麹高义
2023-03-14

所以\x00是一个零所以"\x00" == "\0"

名称中或修剪中可能有十六进制字符串

两个字符中都应该有普通字符串,或者两个字符中都有十六进制

你为什么不尝试使用双重逃脱。所以:

$deviceName = trim($x, '\\x00');

从php文档中阅读:php转义序列。。

秋向阳
2023-03-14

使用此选项删除不可打印的字符

$string = preg_replace( '/[^[:cntrl:]]/', '',$string);
路阳华
2023-03-14

代码不起作用的原因是函数trim的参数在单引号中,而不是在双引号中,即以下参数可以工作

$name = "~DeviceName=TX628\x00";
$x = trim($name, '~DeviceName=');
$deviceName = trim($x, "\x00");

请注意,trim不应用于删除字符串,而应用于删除选定的字节。例如,如果设备名称为DX628,则结果将为X628,因为第一个修剪也将删除初始的D字节。

为了安全地从另一个字符串的开头删除该字符串,您应该使用例如preg\u replace。

 类似资料:
  • 问题内容: 如何从PHP字符串中删除STX等控制字符?我玩过 但发现它消除了很多麻烦。有没有办法 只 删除 控制字符? 问题答案: 如果用控制字符表示前32个ASCII字符和(包括回车等),那么它将起作用: (请注意单引号:双引号的使用会以某种方式导致解析错误。) 可以这样删除换行和回车符(通常写为和),以免删除: 更好地传达了代码的作用。 警告: PHP> = 5.3.0中已弃用,而PHP> =

  • 问题内容: 我在删除特殊字符时遇到问题。我想删除除“()/。%-&”以外的所有特殊字符,因为我将该字符串设置为标题。 我编辑了原始代码(如下所示): 但这无法删除特殊字符,例如:“,”,“”。 原始代码:(此方法有效,但会删除以下字符:“()/。%-&”) 问题答案: 您的句点匹配所有字符。转义它(和其他特殊字符),如下所示:

  • 问题内容: 在PHP中,我有一个包含所有字符串的变量数组。存储的某些值是带逗号的数字字符串。 我需要的: 一种从字符串中修剪逗号的方法,并且仅对数字字符串执行此操作。这并不像看起来那样简单。主要原因是以下操作失败: 失败是因为是数字。但不是数字。因为我得到的某些字符串将是带逗号的常规句子,所以我无法对每个字符串都执行字符串替换。 问题答案: 未经测试,但可能类似

  • 问题内容: 嘿,我需要删除字符串中的所有图像,但我找不到正确的方法。 这是我尝试过的方法,但是不起作用: 有任何想法吗? 问题答案: 尝试将放到的前面。 编辑:我刚刚测试了您的正则表达式,它工作正常。这是我使用的: 结果是:

  • 被删除,因此也是另一个匹配字符串的一部分,不确定这是由于错误的regEx还是反字符类的错误应用。

  • 问题内容: 如果我有一个字符串列表,例如: 为了摆脱每个字符串中的所有s,我该怎么办?我尝试在for循环中使用或,但是它无法像正常字符串(不在列表中)那样工作。有人有建议吗? 问题答案: 尝试这个: