简体   繁体   English

PHP:转义非字母数字字符

[英]PHP: escape non-alphanumeric characters

I'm trying to port a script that I wrote in bash some time ago into PHP.我正在尝试将前一段时间在 bash 中编写的脚本移植到 PHP 中。 One particular line is about escaping all non-alphanumeric characters.一个特定的行是关于 escaping 所有非字母数字字符。

In bash, I was able to do it as a one-liner as follows:在 bash 中,我能够将其作为单行执行,如下所示:

echo "aaa bbb::" | sed 's/\([^a-zA-Z0-9]\)/\\\1/g'
# => aaa\ bbb\:\:

The closest I got in PHP was with this:我在 PHP 中得到的最接近的是:

echo preg_replace('/([^a-zA-Z0-9])/','\\\','aaa bbb::');
# => aaa\bbb\\

However I'm struggling to reuse my regex group inside preg_replace (I tried \1 and $1).但是,我正在努力在preg_replace中重用我的正则表达式组(我尝试了 \1 和 $1)。

Can someone help me get this PHP one-liner right please?有人可以帮我买这个 PHP 单线吗?

echo preg_replace('/([^a-zA-Z0-9])/',"\\\\$1",'aaa bbb::');
//output => aaa\ bbb\:\:

Use [^[:alnum:]] to represent all non-alphanumeric characters in your locale and don't forget to double-double escape your backslashes:使用[^[:alnum:]]表示您的语言环境中的所有非字母数字字符,不要忘记双倍转义反斜杠:

$ cat test.php
#!/usr/bin/env php

<?
echo preg_replace('/([^[:alnum:]])/', '\\\\$1', 'aaa bbb::');
?>

$ ./test.php 
aaa\ bbb\:\:

Try:尝试:

echo preg_replace('~([^a-zA-Z0-9])~', '\\\\$1', 'aaa bbb::');

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM