【问题标题】:Displaying image name with html decimal code and URL encoded显示带有 html 十进制代码和 URL 编码的图像名称
【发布时间】:2013-08-17 17:42:27
【问题描述】:

我构建了 Web 应用程序来管理客户的备件,它带有手册作为标准的零件 ID。
我检查了它的零件 ID 是唯一的数字。使用 MYSQL v5.5.16 存储记录和使用 PHP v5.3.8 的 Web 界面。

根据客户要求,他们希望在文件夹中列出备件图像。基本上,当用户输入记录并上传图像时,我根据存储在数据库中的部分 ID 重命名图像并将上传的图像复制到文件夹。

是的,当用户显示图像时它工作得很好(part-id:241203、299301 ...等)。当 part-id 带有 1/8S40003 时,如您所知,图像名称不能包含某些字符(/ \ : * ?" |)。

我还将<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 放在页面顶部的<head> 标签和header('Content-type: text/html; charset=utf-8'); 之间。

我简化了,只需将“/”符号编码为 html 十进制代码 -> /
将图像名称存储到数据库中似乎效果很好,上传图像工作 100%,我也在检查文件夹内手动图片,

但是当用

显示图片时
<img src='../Images/Spare parts/1/8S40003.png' />

Web 浏览器自动将其解码到路径目录 ('/'),​​但我在 'view source' 上检查了一个标签,它是用&lt;img src='../Images/Spare parts/1&amp;#047;8S40003.png' /&gt; 编写的。

即使使用 htmlentities、html_entity_decode、htmlspecialchar,htmlspecialchars_decode 也不起作用,并且更糟糕地将 '&' 符号转换为 &amp;amp;

我找到了另一种方法,通过使用 php 中的 urlencode,通过转换 '/' -> %2F 并附加数字的其余部分。

<img src='../Images/Spare parts/1%2F8S40003.png' />

我在“查看源代码”上检查了一个标签,它与上面的写法相似,但没有给出解决方案。

任何曾经遇到过这个问题或想法的人都将不胜感激!谢谢。

【问题讨论】:

  • 向我显示您存储图像的目标文件夹路径
  • 尝试使用rawurlencode($imgName) - php.net/rawurlencode
  • @Tigger 它的工作就像魔术一样!谢谢=)

标签: php html


【解决方案1】:

正如 chirag 在他的回复中指出的那样,问题在于文件系统也不接受像 / 这样的某些字符。所以你可能在文件名中使用&amp;#047; 存储了图像。

所以要在网址中使用那个乱七八糟的图片名称,您需要使用:urlencode(str_replace('/','&amp;#047;',$id))

如果您想出一个更可靠的从部件 ID 生成文件名的方案,例如通过将 rawurlencode 应用于文件名,这可能会更好。这将导致在引用 html 链接中的图像时应用 url 编码两次,但它是可靠的:urlencode(rawurlencode($id))

【讨论】:

  • 是的,它可能会为我们提供更可靠的方案,但网络浏览器很难读取图像名称,因为它的两次编码和图像不会像我们预期的那样出现。感谢您的解释,但使用 rawurlencode($id) 就像魅力一样!非常感谢=)我测试了$id包含&amp;#047;%2F并应用了rawurlencode(),图像出现在页面上,这可能会发生,导致网络浏览器解码任何出现在页面上的编码字符一次。=)
猜你喜欢
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-14
  • 2020-01-17
  • 1970-01-01
相关资源
最近更新 更多