2016-07-14 114 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

你说得对,对不起。请看我更新的答案。 –