我需要在我的网页标题中显示一些上标和下标字符。我有一个帮助方法,可以识别下标或上标的模式,并将其转换为& sub2;或²
但是,当它出现在渲染页面的文件中时,它会在源代码中显示为:
&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;sub2;
答案 0 :(得分:0)
您也可以使用Rails I18n实现此目的。
shiftLeft
并在您的相应区域设置文件中。 (<%= t(:page_title_html, scope: [:title]) %>
最有可能):
title.en.yml
以下是关于下标和上标的HTML symbols图表。
有关详细信息,请查看Preventing HTML character entities in locale files from getting munged by Rails3 xss protection
<强>更新强>:
如果您需要动态加载页面标题,首先,您必须安装像Page Title Helper这样的宝石。
您可以按照gem文档中的指南进行操作。
答案 1 :(得分:0)
你的例子有两个问题,一个是问题,另一个只是巧合。
第一个问题是您正在尝试使用实际不存在的字符实体。具体来说,只有¹
,²
和³
提供 1 , 2 和 3 分别是上标符号。没有&sup4;
这样的字符实体,也没有任何其他上标数字。虽然您可以使用其他数字的裸代码点,但这需要更复杂的代码。
更重要的是,HTML5 character entities list中根本没有下标字符实体。所有下标数字都是裸码点。因此用&sub2;
或任何其他&#34;下标&#34;替换任何东西是没有意义的。数字。
您没有看到示例正常工作的原因是您选择的测试字符串。提供带有下划线的任何内容(例如_2_mystring
)都将被&sub2;
正确替换。由于&sub2;
字符实体不存在,字符串将按原样显示,从而产生raw
方法无法正常工作的印象。
尝试使用~2~mystring
,它将替换为上标字符实体²
,并将正确呈现。这说明您的代码是正确的,但关于字符实体的基本假设不是。