2016-07-14 113 views
2

我需要在我的網頁標題中顯示一些上標和下標字符。我有一個認識到對標或上標圖案,並將其轉換爲&sub2;或²防止Ruby更改爲和&?

但是一個輔助方法,當它在渲染頁面的文件顯示出來,它顯示了在源代碼爲:

&sub2; 

這是不對的。我把它設置爲:

<% provide(:title, raw(format_title(@hash[:page_title]))) %> 

但原料不起作用。任何幫助表示讚賞。

方法:

def format_title(name) 
label = name 
if label.match /(_[\d]+_)+|(~[\d]+~)+/ 
    label = label.gsub(/(_([\d]+)_)+/, '&sub\2;') 
    label = label.gsub(/(~([\d]+)~)+/, '&sup\2;') 
    label.html_safe 
else 
    name 
end 

我甚至試過:

str.gsub(/&amp;/, '&') 

但它給回:

&amp;amp;sub2; 
+1

你的'format_title'方法是什麼? –

+0

是否是'<%provide ....'缺少'='的拼寫錯誤?在嵌入式ruby的'.erb'中,我們必須使用'<%= provide ...',對吧? – Lahiru

+0

新增方法@NicNilov – yondaimehokage

回答

0

您也可以使用Rails的I18n實現這一目標。

<%= t(:page_title_html, scope: [:title]) %> 

並在您的相應區域設置文件中。 (title.en.yml最有可能):

title: 
    page_title: "Title with &sup2;" 

這裏是HTML symbols關於下標和上標圖表。

有關更多信息,請Preventing HTML character entities in locale files from getting munged by Rails3 xss protection


更新

如果你需要動態加載的網頁標題,首先,你必須安裝一個寶石狀Page Title Helper

您可以按照gem文檔中的指南進行操作。

+0

不幸的是,這對我無效,因爲頁面標題會根據您所在的頁面動態更改。 – yondaimehokage

+0

@yondaimehokage我已更新答案 – Lahiru

0

你的例子有兩個問題,一個是問題,另一個只是巧合。

第一個問題是您試圖使用實際上不存在的字符實體。具體而言,只有&sup1;,&sup2;&sup3;分別提供,和上標符號。沒有像&sup4;這樣的字符實體,也沒有其他上標數字。儘管可以使用其他數字的裸碼點,但這需要更多涉及的代碼。

更重要的是,在HTML5 character entities list中根本沒有下標字符實體。所有下標數字都是裸碼點。因此用&sub2;或任何其他「下標」數字代替任何東西是沒有意義的。

你沒有看到你的例子工作的原因是你選擇的測試字符串。提供任何帶下劃線的東西,如_2_mystring將正確替換爲&sub2;。由於&sub2;字符實體不存在,該字符串將按原樣顯示,從而產生raw方法無法正常工作的印象。

嘗試使用~2~mystring,它將被替換爲上標字符實體&sup2;,並且將被正確渲染。這說明你的代碼是正確的,但是關於字符實體的基本假設不是。

+0

添加標籤不會幫助我,因爲此值需要出現在標籤之間。 – yondaimehokage

+0

你說得對,對不起。請看我更新的答案。 –