显示带有html十进制代码和URL编码的图像名称


Displaying image name with html decimal code and URL encoded

我构建了web应用程序来管理客户端的备件,它附带了手册作为他们的标准部件
我检查了它的部件id是唯一的数字。使用MYSQL v5.16存储记录,使用PHP v.3.8存储web界面。

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

是的,当用户显示图像时,它工作得很好(部件id:241203299301…等)。当部件id与1/8S40003一起提供时,正如您所知,图像名称不能由一些字符组成(/'':*?"<>|)。

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

我简化了,只将"/"符号编码为html十进制代码->&#047;
将图像名称存储到数据库中似乎效果良好,上传图像的效果100%,我还手动检查文件夹中的图像,

但是当使用显示图像时

<img src='../Images/Spare parts/1/8S40003.png' />

Web浏览器自动将其解码到路径目录("/")中,但我检查了"查看源"上的一个标记,它是用<img src='../Images/Spare parts/1&#047;8S40003.png' />编写的。

即使使用htmlentities、html_entity_decode、htmlspecialchar,htmlspecialchar _decode也不起作用,并且使转换"&"变得更糟登录&amp;

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

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

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

任何人,谁曾经经历过这个问题或想法将不胜感激!非常感谢。

chirag在回复中指出,问题是文件系统也不接受/之类的一些字符。因此,您可能将带有&#047;的图像存储在文件名中。

因此,要在url中使用那个混乱的图像名称,您需要使用:urlencode(str_replace('/','&#047;',$id))

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