From 225d65b2fd31b793fb74feb90587f1fefd183169 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 27 Oct 2009 03:21:21 +0100 Subject: Add env flag SMS_CP, and transliterate too complex characters. --- localmarkdown2sms | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'localmarkdown2sms') diff --git a/localmarkdown2sms b/localmarkdown2sms index 896b34f..7293583 100755 --- a/localmarkdown2sms +++ b/localmarkdown2sms @@ -28,7 +28,8 @@ use Log::Log4perl qw(:easy); use File::Spec; use File::Slurp; use Time::Duration::Parse; -use Encode; +use Text::Unidecode; +use Encode 2.12 qw(encode decode_utf8 _utf8_off); # need v2.12 to support coderef use LWP::UserAgent; use URI::Escape; use Proc::Daemon; @@ -41,6 +42,7 @@ my $sms_pw = $ENV{SMS_PW} || "foobar"; my $sms_phone = $ENV{SMS_PHONE}; my $sms_smsc = $ENV{SMS_SMSC}; my $sms_msgtag = $ENV{SMS_MSGTAG} || "text"; +my $sms_cp = $ENV{SMS_CP} || "utf8"; my $path = $ENV{mdpath}; my (%file, %delay, %reply); @@ -172,6 +174,19 @@ sub tidymsg { return $msg; } +# based on Text::Unidecode bug#8017: http://rt.cpan.org/Ticket/Display.html?id=8017#txn-322351 +sub transliterate { + my ($tocharset, $string) = @_; + + my $res = encode($tocharset, decode_utf8($string), sub { + my $ascii = unidecode(chr $_[0]); + _utf8_off($ascii); + $ascii; + }); + + return $res; +} + sub sendmsg { my ($phone, $desc, $msg) = @_; @@ -184,7 +199,7 @@ sub sendmsg { . '&to=' . uri_escape($phone); $url .= '&from=' . uri_escape($sms_phone) if ($sms_phone); $url .= '&smsc=' . uri_escape($sms_smsc) if ($sms_smsc); - $url .= '&' . $sms_msgtag . '=' . uri_escape(encode("cp1252", $msg)); + $url .= '&' . $sms_msgtag . '=' . uri_escape(transliterate($sms_cp, $msg)); my $response = $ua->request(HTTP::Request->new('GET', $url)); unless ($response->is_success) { ERROR $response->status_line; -- cgit v1.2.3