要在[]中添加{或}符号>

问题描述 投票:0回答:1

在我们的结构化数据区域(在<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

"&#123;search_term_string&#125;".html_safe

%({search_term_string})

%(&#123;search_term_string&#125;).html_safe

但什么都没有

在结构化数据区域(在]中),我们有以下“ potentialAction”:{“ @type”:“ SearchAction”,“ target”:“”,“ query -...

您需要生成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
ruby-on-rails ruby-on-rails-4
1个回答
0
投票

您需要生成URL的模板(不一定是有效URL本身,而是可以用于生成有效URL的模板)。您确切地知道需要替换的内容,可以确定它只会在一个地方发生,而且您知道所有内容都是安全的,因为您可以控制所有内容,而GoogleBot知道它要查找的内容(大概)。

© www.soinside.com 2019 - 2024. All rights reserved.