文件名具有重音字符的URL

时间:2015-02-22 03:57:25

标签: php mysql apache2.2

在我的一个基于PHP的网站中,我有一个脚本,它将显示来自CentOS服务器的图像。图像路径取自MySQL数据库。存储在服务器上的图像文件(以及数据库中的相应条目)中包含重音字符和空格。

因此,当PHP脚本尝试访问图像URL时,它会返回找不到文件的错误。当我检查apache错误日志时,我可以看到文件名中的重音字符显示为“2-EDUCACI \ xc3 \ x93N SECUNDARIA-ACTIVIDAD ACAD \ xc3 \ x89MICA-VIAJE FIN DE CURSO(1).jpg”(示例)图像名称“2-EDUCACIÓNSENDADARIA-ACTIVIDADACACIÉMICA-VIAJE FIN DE CURSO(1).jpg”)

如果我尝试通过shell获取文件列表,并在引号内给出真实文件名,我可以获取列表。但是,如果我尝试不给出任何文件名,列表会显示?标记而不是文件名中的重音字符。

您能否就解决此文件未找到问题给我一些指导。我正在寻找一个涉及改变PHP代码或服务器本身的解决方案?我有权访问服务器。

我在网上已经遇到过一些类似的问题和答案,但那些是指在服务器上更改文件名的编码(比如使用像convmv这样的实用程序)。但就我而言,我无法更改文件名或编码。客户从本地系统上传这些文件,因此我不能坚持使用特定的命名约定或文件名编码。我正在寻找的是通过一些PHP函数或apache配置实现这一目标的可能性。

对此有任何意见,我们非常感谢。

谢谢&此致

Sujith

2 个答案:

答案 0 :(得分:0)

在您的过程中某些时候看起来您的字符编码不一致,并且您的数据返回8位编码。您必须实体解码并重新编码。有关详细信息,请参阅this answer

答案 1 :(得分:-1)

您好遇到过这个问题,只需使用这样的iconv功能:

echo iconv("ISO-8859-1//TRANSLIT", "UTF-8", $lien);