2016-06-08 35 views
0

我在我的sinatra應用程序的視圖中構建了一個url使用url unescape在字符串視圖中構建url

我需要在我的應用程序中使用URI模塊。

<li><a href="/blog/#{URI.unescape(<%= blog.title %>)}/<%= blog.slug %>"" method="get">Show</a></li> 

沒有URI.unescape我沒有看到%20當我將鼠標懸停在鏈接。我只看到這個:

http://127.0.0.1:9292/blog/Coffee Title/49459 

我希望那個空間是-。但是,當我點擊鏈接它會在我的瀏覽器返回爲:

http://127.0.0.1:9292/blog/Coffee%20Title/49459 

我試着在IRB使用URI.unescape。我無法評估字符串中的Ruby代碼。我不確定什麼是正確的格式,但認爲我正在接近。

+0

您是否確認該空間是在服務器發送給瀏覽器的實際HTML中進行百分比編碼的,或者當您懸停或單擊該鏈接時,您剛剛看到「%20」? –

+0

沒有'URI.unescape'當鼠標懸停在鏈接上時,我看不到'%20'。我只看到這個'http://127.0.0.1:9292/blog/Coffee Title/49459'。我希望這個空間是一個' - '。但是當我點擊鏈接時,它會在我的瀏覽器中以「http://127.0.0.1:9292/blog/Coffee%20Title/49459」的形式返回。 – Jngai1297

+0

你沒有提到你想用破折號替換空格。你應該編輯你的問題來準確描述你想要的輸出。 –

回答

0

URI.escape用字符串percent-encoded counterpart替換字符串中的字符,這就是空格字符變爲%20(20是空格的ASCII字符碼)的原因。它不會用短劃線代替空格。

要替換字符串中的另一個字符的字符,使用String#tr

title = "Coffee Title" 
title_with_dashes = title.tr(" ", "-") 
puts title_with_dashes 
# => Coffee-Title 

然而,這只是等式的一半。您已更改鏈接中的網址,但是由於存在的路徑是Coffee Title而不是Coffee-Title,因此當有人點擊該鏈接時,您的服務器可能無法識別該網址。但這是另一個問題的主題。