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);
}