我构建了Web应用程序来管理客户端的备件,它附带了手册,作为标准的part-id。
我检查了它的part-id是唯一的数字。使用PHP v5.3.8使用MYSQL v5.5.16和Web界面存储记录。
根据客户要求,他们希望备件图像列在文件夹中。基本上,当用户输入记录并上传图像时,我根据存储在数据库中的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十进制代码 - &gt; /
。
将图像名称存储到数据库中似乎运行良好,上传图像工作100%,我也在文件夹内手动检查图像,
但用
显示图像时<img src='../Images/Spare parts/1/8S40003.png' />
Web浏览器自动将其解码为路径目录('/'),但我检查了'view source'上的标签,用<img src='../Images/Spare parts/1/8S40003.png' />
编写。
即使使用 htmlentities ,html_entity_decode, htmlspecialchar ,htmlspecialchars_decode也无法正常工作,转换'&amp;'会更糟糕登录&
我找到了另一种方法,通过使用来自php的 urlencode ,通过转换'/' - &gt; %2F并附加其余的数字。
<img src='../Images/Spare parts/1%2F8S40003.png' />
我检查了'view source'上的标签,它与上面的内容类似,但它没有提供解决方案。
任何曾经遇到此问题的人或想法都会受到赞赏!谢谢。
答案 0 :(得分:0)
正如chirag在答复中指出的那样,问题是文件系统也不接受某些字符,例如/
。因此,您可能会在文件名中存储/
的图像。
因此,要在网址中使用混乱的图像名称,您需要使用:urlencode(str_replace('/','/',$id))
。
如果您想出一个更加可靠的方案来从部件ID生成文件名,可能会更好,例如将rawurlencode应用于文件名。这会导致在引用html链接中的图像时应用url编码两次,但它是可靠的:urlencode(rawurlencode($id))