文件名带有重音字符的 URL

URLs with file names having accented characters

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

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

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

能否请您给我一些解决此文件未找到问题的指导。我正在寻找一种解决方案,涉及更改 PHP 代码或服务器本身的某些内容?我有服务器的root权限。

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

非常感谢任何与此相关的意见。

感谢和问候

苏吉特

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

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

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