8

如何从字符串末尾删除 ETX 字符 (0x03)?我想要一个函数,否则我可以写一个正则表达式,我只想知道如何匹配正则表达式中的 ETX 字符?trim()不起作用。

4

4 回答 4

8

为了完成查尔斯的回答,我遇到了 ETX 字符不在行尾的情况,所以我不得不使用以下代码:

$string = preg_replace('/\x03/', '', $string);

只需删除 $ 符号。

于 2014-03-24T12:35:02.787 回答
2

您是否尝试过 rtrim 功能

http://php.net/manual/en/function.rtrim.php

于 2011-09-27T01:20:08.190 回答
1

ETX是一个控制角色,这意味着我们必须通过一些额外的努力来实现它。

从 PHP 交互式提示:

php > $borked = "Hello, have an ETX:" . chr(3);
php > print_r($borked);
Hello, have an ETX:
php > var_export($borked);
'Hello, have an ETX:'
php > echo urlencode($borked);
Hello%2C+have+an+ETX%3A%03
php > var_dump( preg_match('/' . chr(3) . '/', $borked) );
int(1)
php > var_dump( preg_match('/' . chr(3) . '$/', $borked) );
int(1)
php > echo urlencode( preg_replace('/' . chr(3) . '$/', '', $borked) );
Hello%2C+have+an+ETX%3A

换句话说,您基本上可以将字符注入到正则表达式字符串中。现在,这可能会适得其反。这种技术可能会因字符集和其他可怕的事情而适得其反。

除此之外chr(3),您还可以尝试urldecode('%03')制作角色。您还可以使用PCRE 语法页面中列出的特殊转义语法:/\x03$/

这是给你的一个函数,使用最后一种方法:

function strip_etx_at_end_of_string($string) {
    return preg_replace('/\x03$/', '', $string);
}
于 2011-09-27T03:36:18.900 回答
0

猜测一下 rtrim($var,"\c"); 或 preg_replace("/\c+\$/",'',$var);

于 2011-09-27T03:03:21.590 回答