文件名带有重音字符的URL


URLs with file names having accented characters

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

因此,当PHP脚本试图访问图像URL时,它会返回一个未找到文件的错误。当我查看apache错误日志时,我可以看到文件名中的重音字符显示为"2-EDUCACI''xc3''x93N SECUNDARIA-ACTIVIDAD ACAD''xc3''x89MICA VIAJE FIN DE CURSO(1).jpg"(图像名称"2-EDUCACIÖN SECUNDARIA-ACTIVIDA ACADÉMICA-VIAJE FIN-DE CURSO(2).jpg"的示例)

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

你能给我一些关于解决这个文件找不到的问题的指导吗。我正在寻找一个涉及更改PHP代码或服务器本身的解决方案?我拥有对服务器的root访问权限。

我已经在网上遇到了一些类似的问题和答案,但这些问题和答案都是指更改服务器上文件名的编码(比如使用convmv等实用程序)。但在我的情况下,我无法更改文件名或编码。这些文件是由客户从本地系统上传的,因此我不能强迫他们使用特定的命名约定或文件名编码。我正在寻找的是通过一些PHP函数或apache配置来实现这一点的可能性。

我们非常感谢任何有关这方面的意见。

谢谢&问候

Sujith

在处理过程中的某个时刻,您的字符编码似乎不一致,并且您的数据返回8位编码。您必须对其进行实体解码和重新编码。有关详细信息,请参阅此答案。

Hi遇到过这些问题,只需使用以下图标即可:

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