[英]Perl regex replace with UTF-8 characters
我對嘗試用Perl
編寫的函數感到絕望。 我的功能是為特定字符過濾字符串。 我允許一些字符,例如AZ, az, 0-9
並且我還希望允許一些德國變音符號。 但是每次我在正則表達式中定義它們時,替換都會失敗。
我的編碼是UTF-8
(服務器,Perl,腳本)。
這是我的功能:
sub cleanXSS{
my $string = shift;
$string =~ s/[^A-Za-z0-9öäü]//g;
return $string;
}
我的腳本如下所示:
my $scalar = "áéíóúÁÉÍüÓÚâêÄîôßû()ÂÊÎÔÛabcäüöÄÜÖý#µzdjheäöü";
print cleanXSS($scalar)."\n";
因此,它應該替換除AZ, az, 0-9
和小寫變音符號之外的所有字符。 在我的測試字符串中替換德國變音符的效果很好,但似乎所有其他拉丁字符僅被部分替換了。
控制台輸出如下所示:
▒▒▒▒▒▒▒▒▒ü▒▒▒▒▒▒▒▒▒▒▒▒▒▒abcäüö▒▒▒▒zdjheäöü
我嘗試了許多解決方案,例如“使用區域設置”,其他編碼,通過“使用編碼”的顯式編碼等等。
似乎在á
這樣的字符中,僅2個字節中的1個被替換了。 如果我將替換項更改為此:
$string =~ s/[^A-Za-z0-9öäü]/_/g;
我得到以下輸出:
▒_▒_▒_▒_▒_ö▒_▒_▒_ü▒_▒_▒_▒_▒_▒_▒_▒_▒___▒_▒_▒_▒_▒_abcäüö▒_▒_▒_▒____zdjheäöü
我該如何實現?
似乎在類似“á”的字符中,只有2個字節中的1個被替換了。
解碼輸入。
您沒有告訴Perl您的腳本是使用UTF-8編碼的。 加
use utf8;
編碼輸出。
您還需要執行以下操作來編碼輸出:
use open ':std', ':encoding(UTF-8)';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.