如何从字符串末尾删除ETX字符?(使用正则表达式或PHP)

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

9
为了补充Charles的答案,我曾遇到过一种情况,即ETX字符不在行末,因此我不得不使用以下代码:
$string = preg_replace('/\x03/', '', $string);

只需删除美元符号。


如果您使用多字节字符集,例如utf-8或utf8mb4,会存在危险。 - Tristan CHARBONNIER

2

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 syntax pages 中所列出的: /\x03$/
下面是一个使用最后一种方法的函数示例:
function strip_etx_at_end_of_string($string) {
    return preg_replace('/\x03$/', '', $string);
}

0

猜测可能是 rtrim($var,"\c"); 或 preg_replace("/\c+\$/",'',$var);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接