From 4b51871f6a906364ac34be13d0bc5edf6cbbf9c7 Mon Sep 17 00:00:00 2001
From: Guo Xiang Tan <tgx_world@hotmail.com>
Date: Thu, 21 Dec 2017 14:22:55 +0800
Subject: [PATCH] Treat non-ascii URLs in `UrlValidator`.

---
 lib/validators/url_validator.rb                  | 7 ++++++-
 spec/components/validators/url_validator_spec.rb | 2 ++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/lib/validators/url_validator.rb b/lib/validators/url_validator.rb
index 7c91bf206ba..7edfe431f3c 100644
--- a/lib/validators/url_validator.rb
+++ b/lib/validators/url_validator.rb
@@ -5,7 +5,12 @@ class UrlValidator < ActiveModel::EachValidator
         begin
           uri = URI.parse(value)
           uri.is_a?(URI::HTTP) && !uri.host.nil? && uri.host.include?(".")
-        rescue
+        rescue URI::InvalidURIError => e
+          if (e.message =~ /URI must be ascii only/)
+            value = URI.encode(value)
+            retry
+          end
+
           nil
         end
 
diff --git a/spec/components/validators/url_validator_spec.rb b/spec/components/validators/url_validator_spec.rb
index 5554700b774..4278fc2ecbc 100644
--- a/spec/components/validators/url_validator_spec.rb
+++ b/spec/components/validators/url_validator_spec.rb
@@ -23,6 +23,8 @@ RSpec.describe UrlValidator do
   [
     "http://discourse.productions",
     "https://google.com",
+    'http://xn--nw2a.xn--j6w193g/',
+    "http://見.香港/",
   ].each do |valid_url|
     it "#{valid_url} should be valid" do
       record.website = valid_url