ruby-on-rails - 将 <%= search_url 中的 { 或 } 符号添加到头部
问题描述
在我们的结构化数据区域(in <head>
)中,我们有这个
"potentialAction": {
"@type": "SearchAction",
"target": "<%= search_url(search: {q: "{search_term_string}" }) %>",
"query-input": "required name=search_term_string"
}
观看“目标”。它以这种方式向我显示链接
它告诉我
https://www.mywebsite.com/search?utf8=%E2%9C%93&search%5Bq%5D=%7Bsearch_term_string%7D
它不显示 { 或 } 但 %7B 和 %7D
怎么解决?
我已经尝试使用
"{search_term_string}".html_safe
或者
"{search_term_string}".html_safe
或者
%({search_term_string})
或者
%({search_term_string}).html_safe
但没有
解决方案
您需要生成 URL 的模板(不一定是有效的 URL 本身,而是可用于生成有效 URL 的模板)。你确切地知道你需要更换什么,你可以很确定它只会发生在一个地方,你知道一切都是安全的,因为你是一切的控制者,而且 GoogleBot 知道它在寻找什么(大概)。
我会继续手动修补编码:
search_url(search: { q: "{search_term_string}" }).sub('%7Bsearch_term_string%7D', '{search_term_string}')
如果您认为该模式会出现不止一次(这极不可能),请gsub
使用sub
.
你也可以更明确地说明你在做什么:
.sub('%7Bsearch_term_string%7D') { |encoded| URI.decode(encoded) }
或者把它全部放在一个助手中(比如search_url_for_microdata
),这样你就可以给未来的自己留个便条,说明你为什么要这样做:
# Untangle URL encoding issues with json+ld microdata for GoogleBot.
def search_url_for_microdata
search_url(search: { q: '{search_term_string}' })
.sub('%7Bsearch_term_string%7D') { |encoded| URI.decode(encoded) }
end
甚至:
# Untangle URL encoding issues with json+ld microdata for GoogleBot.
def search_url_for_microdata
decoded = '{search_term_string}'
encoded = URI.encode(decoded)
search_url(search: { q: decoded }).sub(encoded, decoded)
end
或者:
DECODED = '{search_term_string}'
ENCODED = URI.encode(DECODED)
# Untangle URL encoding issues with application/ld+json microdata for GoogleBot.
def search_url_for_microdata
search_url(search: { q: DECODED }).sub(ENCODED, DECODED)
end
推荐阅读
- android - 如何对抗 APK 提取器
- java - 是否可以构建除 java 和 c/cpp 之外的 android 应用程序?
- vba - 条件格式 - 如何引用单元格本身?
- assembly - 如何正确使用FDIV?集会
- angular - 有没有办法以百分比指定 ag-grid 列宽?
- angular - Angular Http请求未填充数据
- javascript - 希腊字母未显示在我的网络浏览器页面中
- r - UCI 机器学习存储库数据集
- wpf - 使用 Windows 远程桌面连接时出现 OnRenderSurfaceBaseLoaded 空异常
- jquery - jQuery 在表单中不起作用