# ERB::Util#url\_encode bug fix

**URL:** <https://www.ruby-forum.com/t/erb-util-url-encode-bug-fix/135608>\
**Category:** Development\
**Created:** [April 23, 2008, 3:32pm UTC](https://www.ruby-forum.com/t/erb-util-url-encode-bug-fix/135608 "2008-04-23T15:32:36Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [April 23, 2008, 3:32pm UTC](https://www.ruby-forum.com/t/erb-util-url-encode-bug-fix/135608/1 "2008-04-23T15:32:36Z")

</div>

e$B$k$S$-$A$G$9!#e(B

ERB::Util#url\_encodee$B$,F|K\8lJ8;zNs$G@5$7$$7k2L$K$J$i$J$$%P%0$r=$@5$7$^$7$?!#e(B

# Index: lib/erb.rb

— lib/erb.rb (revision 16174)  
+++ lib/erb.rb (working copy)  
@@ -799,7 +799,8 @@  
#  
Programming%20Ruby%3A%20%20The%20Pragmatic%20Programmer%27s%20Guide  
#  
def url\_encode(s)

- 

```
 s.to_s.gsub(/[^a-zA-Z0-9_\-.]/n){ sprintf("%%%02X", 

```

$&.unpack(“C”)[0]) }  
+  
s.to\_s.dup.force\_encoding(“ASCII-8BIT”).gsub(/[^a-zA-Z0-9\_-.]/n){

- 

```
   sprintf("%%%02X", $&.unpack("C")[0]) }

```

end  
alias u url\_encode  
module\_function :u  
Index: test/erb/test\_erb.rb  
===================================================================  
— test/erb/test\_erb.rb (revision 16174)  
+++ test/erb/test\_erb.rb (working copy)  
@@ -411,3 +411,18 @@  
assert\_equal(ans, ERB.new(src, nil, ‘-%’).result)  
end  
end
- 

+class TestERBUtil \< Test::Unit::TestCase

- include ERB::Util
- 
- def test\_01
- 

assert\_equal(“Programming%20Ruby%3A%20%20The%20Pragmatic%20Programmer%27s%20Guide”,

- 

```
 url_encode("Programming Ruby: The Pragmatic Programmer's 

```

Guide"))

- end
- 
- def test\_02
- assert\_equal("%A5%B5%A5%F3%A5%D7%A5%EB",
- 

url\_encode("\xA5\xB5\xA5\xF3\xA5\xD7\xA5\xEB".force\_encoding(“EUC-JP”)))

- end
- 

+end

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [April 23, 2008, 4:08pm UTC](https://www.ruby-forum.com/t/erb-util-url-encode-bug-fix/135608/2 "2008-04-23T16:08:45Z")

</div>

e$B?\F#$G$9!#e(B

e$BK\Bj$H4X78$J$$$H$3$m$J$s$G$9$,!#!#!#e(B

In [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
“[ruby-dev:34497] ERB::Util#url\_encode bug fix” on Wed, 23 Apr 2008  
22:30:51 +0900,  
removed\_email\_address@domain.invalid wrote:

> ERB::Util#url\_encodee$B$,F|K\8lJ8;zNs$G@5$7$$7k2L$K$J$i$J$$%P%0$r=$@5$7$^$7$?!#e(B

> - include ERB::Util
> - 
> 
> +end

e$B$\*$=$i$/!“e(BTestERBCoree$B$,e(B01e$B$H$+$D$$$F$$$?$N$G$=$&$7$?$N$@$H;W$&e(B  
e$B$N$G$9$,!”$b$&\>/$70UL#$N$"$k%a%=%C%IL\>$r;H$C$?J}$,$h$$5$$,$7e(B  
e$B$^$9!#!Je(BTestERBCoree$B$N%a%=%C%IL\>$OD\>$7$?J}$,$h$$$H;W$&!#!Ke(B

e$B$\*$=$i$/!“$A$g$C$HIT;W5D$J%$%s%G%s%H$r$7$F$$$k$N$OJ8;zNs$N0Le(B  
e$BCV$rB7$($?$$$+$i$@$H;W$&$N$G$9$,!”?7$7$/e(Basserte$B$J$s$H$+$rDj5Ae(B  
e$B$7$FIaDL$N%$%s%G%s%H$r$7$?J}$,$h$$5$$,$7$^$9!#e(B

def assert\_url\_encode(expected, input)  
assert\_equal(expected, url\_encode(input))  
end

def test\_XXX  
assert\_url\_encode(“%A5%B5%A5%F3%A5%D7%A5%EB”,  
“\xA5\xB5\xA5\xF3\xA5\xD7\xA5\xEB”.force\_encoding(“EUC-JP”))  
end

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [April 23, 2008, 4:36pm UTC](https://www.ruby-forum.com/t/erb-util-url-encode-bug-fix/135608/3 "2008-04-23T16:36:51Z")

</div>

From: Kouhei S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Subject: [ruby-dev:34498] Re: ERB::Util#url\_encode bug fix  
Date: Wed, 23 Apr 2008 23:06:38 +0900

> e$B$\*$=$i$/!“e(BTestERBCoree$B$,e(B01e$B$H$+$D$$$F$$$?$N$G$=$&$7$?$N$@$H;W$&e(B  
> e$B$N$G$9$,!”$b$&\>/$70UL#$N$"$k%a%=%C%IL\>$r;H$C$?J}$,$h$$5$$,$7e(B  
> e$B$^$9!#!Je(BTestERBCoree$B$N%a%=%C%IL\>$OD\>$7$?J}$,$h$$$H;W$&!#!Ke(B

e$B$=$&$G$9$M!#e(B

> def test\_XXX  
> assert\_url\_encode(“%A5%B5%A5%F3%A5%D7%A5%EB”,  
> “\xA5\xB5\xA5\xF3\xA5\xD7\xA5\xEB”.force\_encoding(“EUC-JP”))  
> end

e$BIT;W5D$J!J!)!K%$%s%G%s%H$J$N$Oe(BEmacse$B$Ge(B  
(setq ruby-deep-indent-paren-style nil)  
e$B$H@\_Dj$7$F$$$k$?$a$G$9!#e(B  
(setq ruby-deep-indent-paren-style t)  
e$B$G\>e$N$h$&$J%$%s%G%s%H$K$J$j$^$9!#e(Bnile$B$K@\_Dj$7$F$$$k$N$Oe(B

Foo::Bar::Baz::Hoge::hoge( :x =\> 1,  
:y =\> 2)

e$B$\_$?$$$K%$%s%G%s%H$,?\<$/$J$C$F$7$^$&$+$i$G$9!#e(B

e$B;29M!'e(Bhttp://d.hatena.ne.jp/gan2/20070621/1182441886

# 

Rubye$BK\BN$N%3!\<%G%#%s%05,Ls$G%$%s%G%s%H$N$d$jJ}$O7h$^$C$F$$$k$N$G$7$g$&$+!)e(B

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [April 23, 2008, 4:56pm UTC](https://www.ruby-forum.com/t/erb-util-url-encode-bug-fix/135608/4 "2008-04-23T16:56:19Z")

</div>

e$B?\F#$G$9!#e(B

In [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
“[ruby-dev:34499] Re: ERB::Util#url\_encode bug fix” on Wed, 23 Apr  
2008 23:36:10 +0900,  
removed\_email\_address@domain.invalid wrote:

> e$B;29M!'e(Bhttp://d.hatena.ne.jp/gan2/20070621/1182441886

e$B%j%s%/@h$K$"$k$h$&$K$3$le(B

Foo::Bar::Baz::Hoge::hoge( :x =\> 1,  
:y =\> 2)  
e$B$r$3$&e(B

Foo::Bar::Baz::Hoge::hoge(  
:x =\> 1,  
:y =\> 2  
)

e$B$7$?$$$J$i$^$@$o$+$k$N$G$9$,!J;d$O7y$G$9$,!K!"$3$&e(B

Foo::Bar::Baz::Hoge::hoge(:x =\> 1,  
:y =\> 2)

e$B$9$k$N$O$^$k$GM}2r$G$-$J$$$N$G$9$,!#!#!#e(B

# e$B$J$N$G!"$3$l$b5$;}$A0-$$!#e(B

# - s.to\_s.gsub(/[^a-zA-Z0-9\_-.]/n){ sprintf(“%%%02X”,

$&.unpack(“C”)[0]) }

# +

s.to\_s.dup.force\_encoding(“ASCII-8BIT”).gsub(/[^a-zA-Z0-9\_-.]/n){

# + sprintf(“%%%02X”, $&.unpack(“C”)[0]) }

e$B;d$N;}O@$G$O!“%$%s%G%s%H$,?\<$/$J$k$N$O$=$3$G$d$m$&$H$7$F$$$ke(B  
e$B$3$H$,B?$9$.$k7Y9p$J$N$G!”%$%s%G%s%H$r8:$i$7$F$4$^$+$5$J$$$Ge(B  
e$B$=$3$rD\>$7$?J}$,$h$$$H;W$C$F$$$^$9!#Nc$($P!"$3$NNc$G$O;d$O$3e(B  
e$B$s$JIw$K$9$k$H;W$$$^$9!#e(B

def do\_hoge(options)  
Foo::Bar::Baz::Hoge::hoge(options)  
end

do\_hoge(:x =\> 1,  
:y =\> 2)

# e$BK\Ev$Oe(Bdo\_hoge(:x =\> 1, :y =\> 2)e$B$K$7$^$9$,!#e(B
