使用html十进制代码和URL编码显示图像名称

时间:2013-08-17 09:25:13

标签: php html

我构建了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; &#047;
将图像名称存储到数据库中似乎运行良好,上传图像工作100%,我也在文件夹内手动检查图像,

但用

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

Web浏览器自动将其解码为路径目录('/'),但我检查了'view source'上的标签,用<img src='../Images/Spare parts/1&#047;8S40003.png' />编写。

即使使用 htmlentities ,html_entity_decode, htmlspecialchar ,htmlspecialchars_decode也无法正常工作,转换'&amp;'会更糟糕登录&amp;

我找到了另一种方法,通过使用来自php的 urlencode ,通过转换'/' - &gt; %2F并附加其余的数字。

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

我检查了'view source'上的标签,它与上面的内容类似,但它没有提供解决方案。

任何曾经遇到此问题的人或想法都会受到赞赏!谢谢。

1 个答案:

答案 0 :(得分:0)

正如chirag在答复中指出的那样,问题是文件系统也不接受某些字符,例如/。因此,您可能会在文件名中存储&#047;的图像。

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

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