Как удалить символ ETX из конца строки? (Регулярное выражение или PHP) - PullRequest
8 голосов
/ 27 сентября 2011

Как я могу удалить символ ETX (0x03) из конца строки?Я либо хотел бы функцию, в противном случае я могу написать регулярное выражение, все, что я хочу знать, это как сопоставить символ ETX в регулярном выражении?trim() не работает.

Ответы [ 4 ]

8 голосов
/ 24 марта 2014

Чтобы завершить ответ Чарльза, у меня был случай, когда символ ETX не был в конце строки, поэтому мне пришлось использовать следующий код:

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

Просто удалите знак $.

2 голосов
/ 27 сентября 2011

Вы пробовали функцию rtrim

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

1 голос
/ 27 сентября 2011

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'), чтобы получить персонажа.Вы также можете использовать специальный escape-синтаксис, как указано на страницах синтаксиса PCRE : /\x03$/

Вот вам функция, использующая этот последний метод:

function strip_etx_at_end_of_string($string) {
    return preg_replace('/\x03$/', '', $string);
}
0 голосов
/ 27 сентября 2011

По предположению rtrim ($ var, "\ c"); или preg_replace ("/ \ c + \ $ /", '', $ var);

...