[Hiki-dev:01302] Re: [Hiki-cvs 1442] [989] use ERB::Util#h instead of CGi.escapeHTML and String#escapeHTML

Back to archive index

okkez okkez****@gmail*****
2009年 8月 30日 (日) 00:14:56 JST


okkez です。

デッドコピーというとこんな感じでしょうか?
また他の似たようなメソッドはいいんでしょうか?

できれば、Hiki::Util#escape, Hiki::Util#unescape にしときたいなぁ、と思うのですが
いかがでしょうか。

今のプラグインでは CGI.escape も String#escape も使われているので、どうせ修正するなら
Hiki::Util のメソッドを使うように修正しておきたいです。
Rack を使っている時に CGI というクラスが定義されているのがあまり気持ちよくないです。

ちなみに手元では、プラグインも attach を含めてほぼ全てのプラグインが Rack を使った実装で
動くようになりました。


diff --git a/hiki/util.rb b/hiki/util.rb
index 8372928..7669e9f 100644
--- a/hiki/util.rb
+++ b/hiki/util.rb
@@ -8,6 +8,32 @@ require 'erb'
 autoload( :Document, 'docdiff' )
 autoload( :Diff, 'docdiff' )

+if const_defined?(:Encoding)
+  require 'cgi/util'
+else
+  # dead copy from cgi.rb for Ruby1.8
+  class CGI
+    # URL-encode a string.
+    #   url_encoded_string = CGI::escape("'Stop!' said Fred")
+    #      # => "%27Stop%21%27+said+Fred"
+    def CGI::escape(string)
+      string.gsub(/([^ a-zA-Z0-9_.-]+)/n) do
+        '%' + $1.unpack('H2' * $1.size).join('%').upcase
+      end.tr(' ', '+')
+    end
+
+
+    # URL-decode a string.
+    #   string = CGI::unescape("%27Stop%21%27+said+Fred")
+    #      # => "'Stop!' said Fred"
+    def CGI::unescape(string)
+      string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do
+        [$1.delete('%')].pack('H*')
+      end
+    end
+  end
+end
+
 class String
   # all instance methods added in String class will be obsoleted in the
   # future release.



-- 
okkez
okkez****@gmail*****




Hiki-dev メーリングリストの案内
Back to archive index