X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/14b64b556650c4c33f051fe7d23c64743ed8bf08..ebe5398f498dbe5ac37bc3dd2298b50f31c97cf7:/Convert/YText.pm diff --git a/Convert/YText.pm b/Convert/YText.pm index 0ce9b48f1..21955a87b 100644 --- a/Convert/YText.pm +++ b/Convert/YText.pm @@ -41,10 +41,10 @@ local part of an address: "!#$%&'*+-/=?^_`{|}~". On the other hand, it seems common in practice to block addresses having "%!/|`#&?" in the local part. The idea is to restrict ourselves to basic ASCII alphanumerics, plus a small set of printable ASCII, namely "=_+-~.". -Spaces are replaced with "_", the characters "A-Za-z0-9.\+\-~" encode -as themselves, and everything else is written "=USTR=" where USTR is -the base64 (using "A-Za-z0-9\+\-\." as digits) encoding of the unicode -character code. +Spaces are replaced with "_", "/" with "~", the characters +"A-Za-z0-9.\+\-~" encode as themselves, and everything else is written +"=USTR=" where USTR is the base64 (using "A-Za-z0-9\+\-\." as digits) +encoding of the unicode character code. The characters '+' and '-' are pretty widely used to attach suffixes (although usually only one works on a given mail host). It seems ok to @@ -57,6 +57,9 @@ a regular character. The character '.' also seems mostly permissable. =cut our $digit_string="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-."; + +our $valid_rex=qr{[A-Za-z0-9\+\-\.\=\_\~]+}; + our @digits=split "",$digit_string; sub encode_num($){ @@ -94,9 +97,11 @@ sub decode_str($){ sub encode_ytext($){ my $str=shift; # "=" we use as an escape, and '_' for space - $str=~ s/([^a-zA-Z0-9+\-~. ])/"=".encode_num(ord($1))."="/ge; + $str=~ s/([^a-zA-Z0-9+\-\/. ])/"=".encode_num(ord($1))."="/ge; + + $str=~ s|/|~|g; $str=~ s/ /_/g; - + return $str; }; @@ -104,7 +109,7 @@ sub decode_ytext($){ my $str = shift; $str=~ s/=([a-zA-Z0-9+\-\.])+=/ decode_str($1)/eg; $str=~ s/_/ /g; - + $str=~ s|~|/|g; return $str; }