【问题标题】:Search query with & in title gives wrong results标题中带有 & 的搜索查询给出了错误的结果
【发布时间】:2021-12-14 12:28:36
【问题描述】:

我一直在测试 musicbrainz API,但我发现了一个问题。当标题名称中包含“&”时,查询会返回错误的结果。 例如:标题为“auf & ab”,查询返回名为“auf,auf,auf”的标题。

我通过将 '&' 替换为 'and' 来解决这个问题,如下所示:

if (title.includes('&')){title = title.replace('&','and')}

这会返回正确的结果。 我不确定这是否是解决此问题的方法。 这是我的查询: https://musicbrainz.org/ws/2/recording/?query=recording:auf%20&%20ab%20%26%26%20artist:montez&fmt=json&limit=5

【问题讨论】:

  • 当我解码你的网址时..你有 " & " 而不是 "&".. 使用 and 似乎也给出了相同的结果简而言之,在您的网址中https://musicbrainz.org/ws/2/recording/?query=recording:auf&ab&&artist:montez&fmt=json&limit=5 .. 空格键是问题所在(例如:将auf & ab 转为auf&ab
  • auf&ab 也不起作用。到目前为止唯一有效的是将& 替换为and%26。无论如何,这也许是最好的解决方案......
  • 它不起作用是什么意思?检查this repl 看看它的效果如何
  • 是的,它确实有效,因为它给了我结果,但它返回'auf,auf,auf'作为标题,而不是'auf & ab'。 encodeURIComponent() 对我来说似乎是一个很好的解决方案。感谢您的帮助!

标签: node.js musicbrainz


【解决方案1】:

我认为您需要对“空格”(使用 %20)和“&”(使用 %26)字符进行编码,因为它们在 url 中使用,& 将被解码为查询字符串中的另一个新参数;试试这个:

https://musicbrainz.org/ws/2/recording/?query=recording:auf%20%26%20ab&artist:montez&fmt=json&limit=5

这样,你的搜索“auf&ab”->“auf%20%26%20ab”;您可以使用encodeURIComponent("auf & ab")

实现此结果

编辑:更改 encodeURI -> encodeURIComponent

【讨论】:

  • 我的意思是一旦你运行了请求..当你看到他们最后给出的 url 时,目的地已经被编码了 ;-;
  • 感谢您的回答,不幸的是它不起作用。 encodeURI 不会将 & 编码为 %26,而是将其保留为 &
  • 不客气。然而,我的错,方法是“encodeURIComponent”(内存有时会耍花招:))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-13
  • 2013-08-21
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
相关资源
最近更新 更多