【问题标题】:Prevent JSF encoding of & as & in image url防止在图像 url 中 & as & 的 JSF 编码
【发布时间】:2016-03-01 12:01:52
【问题描述】:

我正在从我的数据库中获取一个图像 url,并且需要将它显示在一个 <img> 标记中。我遇到的问题是 JSF 将 & 编码为 & 并且找不到图像 url。

这是一个例子。正确的图片网址:

https://<server details>?ahid=2096&aid=107687&lid=28812968&url=202.jpg

编码后的网址:

https://<server details>?ahid=2096&amp;aid=107687&amp;lid=28812968&amp;url=202.jpg

在这种情况下,找不到编码的图像 url,并显示损坏的图像图标。我该如何解决?

编辑:html 元素及其JSF 标签:

<a href='#{product.itemUrl}' target="_blank"> 
    <img src='#{searchResults.getThumbnailUrl(product)}' class="img-responsive imageproduct" />
</a>

编辑2:

我想我会尝试用javascript&amp;amp;amp; 替换回&amp;amp;amp; 但这也不起作用,因为在javascript 中,图像网址很好,而在浏览器的视图源中却不是.这是代码。在浏览器中:

<img id="thumbnailId" onmouseover="decodeUrl(this)" src="https://www.proxibid.com/asp/LotImageViewer.asp?ahid=3231&amp;aid=108183&amp;lid=28955872&amp;url=144-1.jpg" />

javascript:

function decodeUrl(img) {
    var url = img.src;
    console.log("url before = " + url);
    url = replaceAll(url, "&amp;", "&");
    console.log("url after = " + url);
}

function replaceAll(str, find, replace) {
    return str.replace(new RegExp(find, 'g'), replace);
}

输出是

url before = https://www.proxibid.com/asp/LotImageViewer.asp?ahid=3231&aid=108183&lid=28955872&url=144-1.jpg
url after =  https://www.proxibid.com/asp/LotImageViewer.asp?ahid=3231&aid=108183&lid=28955872&url=144-1.jpg

如您所见,两者是相同且正确的。但是查看源代码会导致

src="https://www.proxibid.com/asp/LotImageViewer.asp?ahid=3231&amp;aid=108183&amp;lid=28955872&amp;url=144-1.jpg"

这是不正确的,并且图像已损坏。知道如何解决这个问题吗?

【问题讨论】:

  • 您使用的是什么服务器端技术(php、.NET 等...)?
  • 在 html 代码中,&amp;amp;amp; 必须编码为 &amp;amp;amp;,因此如果您查看 html 代码,您的图像 url 必须看起来像这样 &lt;img src="https://&lt;server details&gt;?ahid=2096&amp;amp;aid=107687&amp;amp;lid=28812968&amp;amp;url=202.jpg" &gt;,浏览器会自动转换请求图像时该 URL 到 https://&lt;server details&gt;?ahid=2096&amp;aid=107687&amp;lid=28812968&amp;url=202.jpg。我猜你有一些双重编码,你的源实际上包含&amp;amp;amp;&lt;img src="https://&lt;server details&gt;?ahid=2096&amp;amp;amp;aid=107687&amp;amp;amp;lid=28812968&amp;amp;amp;url=202.jpg" &gt;
  • @RichardEverett 这是 JSF2 和 tomcat。
  • 这确实是不正确的。您究竟是如何创建 &lt;img&gt; 元素的?

标签: javascript jsf url-encoding graphicimage


【解决方案1】:

您在浏览器中看到的内容是正确的。在 html 中,&amp;amp; 应编码为 &amp;amp; 这在技术上被解释为 & 当您的浏览器请求图像时,您可以看到您在评论中作为 http 200 响应发布的内容。这里的问题是您希望https://www.proxibid.com/asp/LotImageViewer.asp?ahid=3231&amp;amp;aid=108183&amp;amp;lid=28955872&amp;amp;url=144-1.jpg 在返回 html 页面时返回图像

LotImageViewer.asp?ahid=4292&aid=108223&lid=29012930&url=127.jpg
www.proxibid.com/asp
GET 200 OK
text/html
searchresults:696 Parser 5.1 KB 34.7 KB 277 ms 228 m 

如果您在浏览器中发布this url(或单击此处),您可以看到它返回的内容。所以基本上,错误是你的“期望”。如果您点击图片中的“全屏”,您会看到

https://www.proxibid.com/AuctionImages/3231/108183/FullSize/144-1.jpg

全屏显示图像。所以你需要调整你的代码

【讨论】:

  • 如果您在浏览器中发布proxibid.com/asp/…,则会返回错误。但是当你手动替换 &只需 & 它就可以为您提供图像。但这正是我提交的网址:proxibid.com/asp/…。它不会回来,同时显示带有 & 的链接在浏览器中。所以你的回答并没有真正的帮助。
  • 叹息...您的评论发布了 200,因此您的浏览器将&amp;amp 转为&amp;amp; 并且它起作用了...尝试创建一个小型纯jsf页面并将&lt;img src="&amp;bla.jpg"/&gt;放入那里... 错误?甚至尝试加载页面时很可能是的...尝试将&lt;img src="&amp;amp;bla.jpg"/&gt;放在那里...错误?很可能在浏览器开发工具网络选项卡中出现一些 404,用于尝试加载“&bla.jpg”查看浏览器 UNESCAPING & ???。您的问题是 url 没有返回您期望的内容...
  • 参见stackoverflow.com/questions/6883860/…stackoverflow.com/questions/3705591/… 请学习基础知识并检查、调试等...
  • 我已经知道了。但是您是正确的,该 url 正在返回其他内容,我需要将我拥有的内容转换为有效的语法。所以它与编码或 JSF 没有任何关系,只是 asp 在后台做的事情。
  • 不,它甚至与 ASP 无关...... JSF、Servlets、PHP、Python、Ruby,任何可以做同样的事情......这是一个返回的有效页面,没有任何内容兜帽'。为什么如果你已经知道这一点,我只是在我之前的评论中“不友善”之后才触发了这个“知识”?在您之前的评论中,您有点说我“愚蠢”。无论如何,很好,你找到了原因。下次多做一点调查。
猜你喜欢
  • 1970-01-01
  • 2023-02-07
  • 2013-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
  • 1970-01-01
相关资源
最近更新 更多