diff options
author | Rick Olson <technoweenie@gmail.com> | 2008-04-08 03:45:26 +0000 |
---|---|---|
committer | Rick Olson <technoweenie@gmail.com> | 2008-04-08 03:45:26 +0000 |
commit | 605196c4483bbba932804e78cd6d4166f4e29bbb (patch) | |
tree | 4f682a944ab11aabaf8b9208ff571ebe4aecbd19 /activesupport/lib | |
parent | 4b68982f649c5b230b3e99954a71404c7cec03c7 (diff) | |
download | rails-605196c4483bbba932804e78cd6d4166f4e29bbb.tar.gz rails-605196c4483bbba932804e78cd6d4166f4e29bbb.tar.bz2 rails-605196c4483bbba932804e78cd6d4166f4e29bbb.zip |
Add config.active_support.escape_html_entities_in_json to allow disabling of html entity escaping. [rick]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@9238 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activesupport/lib')
-rw-r--r-- | activesupport/lib/active_support/json.rb | 23 | ||||
-rw-r--r-- | activesupport/lib/active_support/json/encoders/string.rb | 6 | ||||
-rw-r--r-- | activesupport/lib/active_support/json/encoding.rb | 1 |
3 files changed, 26 insertions, 4 deletions
diff --git a/activesupport/lib/active_support/json.rb b/activesupport/lib/active_support/json.rb index 5acb02dbe9..914cf4f8fe 100644 --- a/activesupport/lib/active_support/json.rb +++ b/activesupport/lib/active_support/json.rb @@ -1,9 +1,25 @@ -require 'active_support/json/encoding' -require 'active_support/json/decoding' + module ActiveSupport + # If true, use ISO 8601 format for dates and times. Otherwise, fall back to the ActiveSupport legacy format. mattr_accessor :use_standard_json_time_format + class << self + def escape_html_entities_in_json + @escape_html_entities_in_json + end + + def escape_html_entities_in_json=(value) + ActiveSupport::JSON::Encoding.escape_regex = \ + if value + /[\010\f\n\r\t"\\><&]/ + else + /[\010\f\n\r\t"\\]/ + end + @escape_html_entities_in_json = value + end + end + module JSON RESERVED_WORDS = %w( abstract delete goto private transient @@ -31,3 +47,6 @@ module ActiveSupport end end end + +require 'active_support/json/encoding' +require 'active_support/json/decoding' diff --git a/activesupport/lib/active_support/json/encoders/string.rb b/activesupport/lib/active_support/json/encoders/string.rb index 20ca91f9aa..5ef797955a 100644 --- a/activesupport/lib/active_support/json/encoders/string.rb +++ b/activesupport/lib/active_support/json/encoders/string.rb @@ -1,6 +1,8 @@ module ActiveSupport module JSON module Encoding + mattr_accessor :escape_regex + ESCAPED_CHARS = { "\010" => '\b', "\f" => '\f', @@ -17,9 +19,11 @@ module ActiveSupport end end +ActiveSupport.escape_html_entities_in_json = true + class String def to_json(options = nil) #:nodoc: - json = '"' + gsub(/[\010\f\n\r\t"\\><&]/) { |s| + json = '"' + gsub(ActiveSupport::JSON::Encoding.escape_regex) { |s| ActiveSupport::JSON::Encoding::ESCAPED_CHARS[s] } json.force_encoding('ascii-8bit') if respond_to?(:force_encoding) diff --git a/activesupport/lib/active_support/json/encoding.rb b/activesupport/lib/active_support/json/encoding.rb index adfbfd5f72..8650e34228 100644 --- a/activesupport/lib/active_support/json/encoding.rb +++ b/activesupport/lib/active_support/json/encoding.rb @@ -1,5 +1,4 @@ require 'active_support/json/variable' - require 'active_support/json/encoders/object' # Require explicitly for rdoc. Dir["#{File.dirname(__FILE__)}/encoders/**/*.rb"].each do |file| basename = File.basename(file, '.rb') |