代码之家  ›  专栏  ›  技术社区  ›  Sujith

文件名带有重音字符的URL

  •  1
  • Sujith  · 技术社区  · 9 年前

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

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

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

    你能给我一些解决这个文件找不到的问题的指导吗。我正在寻找一个解决方案,包括在PHP代码中或在服务器本身中更改某些内容?我拥有服务器的root访问权限。

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

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

    谢谢&当做

    苏吉思

    2 回复  |  直到 9 年前
        1
  •  0
  •   Community Stefan Steinegger    7 年前

    看起来您在处理过程中的某个时刻出现了不一致的字符编码,并且您的数据返回了8位编码。您必须对其进行实体解码和重新编码。请参阅 this answer 了解更多信息。

        2
  •  -1
  •   Tom cmoron    7 年前

    嗨,如果遇到过这种问题,只需使用以下图标功能:

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