小编Lin*_*ing的帖子

Perl正则表达式替换为UTF-8字符

我对我尝试写的函数感到绝望Perl.我的功能是过滤特定字符的字符串.我允许一些角色A-Z, a-z, 0-9,我想也允许一些德国变形金刚.但每次我在正则表达式中定义它们时,替换都会失败.

我的编码是UTF-8(server,perl,scripts).

这是我的功能:

sub cleanXSS{

    my $string = shift;

    $string =~ s/[^A-Za-z0-9öäü]//g;

    return $string;
}
Run Code Online (Sandbox Code Playgroud)

我的脚本看起来像这样:

my $scalar = "áéíóúÁÉÍüÓÚâêÄîôßû()ÂÊÎÔÛabcäüöÄÜÖý#µzdjheäöü";
print cleanXSS($scalar)."\n";
Run Code Online (Sandbox Code Playgroud)

因此它应该替换除A-Z, a-z, 0-9小写变音符号以外的所有字符.在我的测试字符串中替换德语变音符合工作正常,但似乎所有其他拉丁字符只是部分替换.

控制台输出如下所示:

?????????ü??????????????abcäüö????zdjheäöü
Run Code Online (Sandbox Code Playgroud)

我尝试过很多解决方法,比如"使用locale",其他编码,通过"使用Encode"进行显式编码等等.

似乎在一个字符中,á只替换了2个字节中的1个.如果我将我的替换更改为:

$string =~ s/[^A-Za-z0-9öäü]/_/g;
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

?_?_?_?_?_ö?_?_?_ü?_?_?_?_?_?_?_?_?___?_?_?_?_?_abcäüö?_?_?_?____zdjheäöü
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

regex perl utf-8 diacritics character-encoding

0
推荐指数
1
解决办法
5447
查看次数

标签 统计

character-encoding ×1

diacritics ×1

perl ×1

regex ×1

utf-8 ×1