diff options
author | Mark Wells <mark@freeside.biz> | 2015-03-25 11:21:32 -0700 |
---|---|---|
committer | Mark Wells <mark@freeside.biz> | 2015-03-25 11:21:32 -0700 |
commit | 1c9056a27c303170060004c1be93787c6a32dcb6 (patch) | |
tree | 0c22c15376f0bf8a874e7ee9c604e392eabc4f31 /FS/FS/Misc.pm | |
parent | 5adac2bcd86a2bb0ddf7b016b5ed1dcd04635aa0 (diff) |
paymentech: enforce field lengths in raw bytes, #29972
Diffstat (limited to 'FS/FS/Misc.pm')
-rw-r--r-- | FS/FS/Misc.pm | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/FS/FS/Misc.pm b/FS/FS/Misc.pm index f597058..9aeff93 100644 --- a/FS/FS/Misc.pm +++ b/FS/FS/Misc.pm @@ -22,6 +22,7 @@ use Encode; generate_ps generate_pdf do_print csv_from_fixed ocr_image + bytes_substr ); $DEBUG = 0; @@ -961,6 +962,26 @@ sub ocr_image { @lines; } +=item bytes_substr STRING, OFFSET[, LENGTH[, REPLACEMENT] ] + +A replacement for "substr" that counts raw bytes rather than logical +characters. Unlike "bytes::substr", will suppress fragmented UTF-8 characters +rather than output them. Unlike real "substr", is not an lvalue. + +=cut + +sub bytes_substr { + my ($string, $offset, $length, $repl) = @_; + my $bytes = substr( + Encode::encode('utf8', $string), + $offset, + $length, + Encode::encode('utf8', $repl) + ); + my $chk = $DEBUG ? Encode::FB_WARN : Encode::FB_QUIET; + return Encode::decode('utf8', $bytes, $chk); +} + =back =head1 BUGS |