php - 将特殊字符存储在数据库中,以便在现场正确显示并仍然找到具有相同名称的图像
问题描述
我有一个网站,用户可以在其中更改他们的位置。
我将所有可用的国家/地区存储在数据库中,并将每个国家/地区的图像存储在同一目录中的文件夹中。
但是,有些国家/地区有特殊字符,无法正常显示或找不到图像。
有问题的国家是:
- 科特迪瓦
- 捷克共和国
我尝试对它们进行 url 编码,所以它是这样的:%C4%8Cesk%C3%A1+republika
我需要一种将它们存储在数据库中的方法,以便它们在站点上正确显示名称并找到同名的图像。
解决方案
首先,请参阅UTF-8 以了解您需要正确执行的所有操作,以使非 ASCII 字符在您的应用程序中正常工作。
其次,在网络上提供具有非 ASCII 文件名的文件是……棘手的……。1)您需要确保使用百分比编码对这些文件的所有 URL 进行编码,就像您似乎已经做的那样。2) Web 服务器将获取该 URL,将其百分比解码为字节字符串,然后要求底层操作系统/文件系统查找具有该字符串名称的文件。这是棘手的部分:您不会确切知道您的操作系统/文件系统使用什么字节字符串来准确表示该文件。您需要先弄清楚这一点,然后专门对 URL 进行编码,以便将其准确解码为正确的字符串。
当您移动到不同的服务器时,特别是如果您从 Windows 移动到 *NIX 或反之亦然,您可以从头再来一次,因为这些系统的工作方式非常不同。
简而言之,这通常比它的价值更麻烦,您应该使用纯 ASCII 名称存储图像以避免所有这些。特别是对于国家,使用两个字符的国家代码作为图像名称(例如“cz.jpg”)会很有意义。
推荐阅读
- php - 需要帮助将 JSON 数据传递到 PHP 中的 CSV 文件
- python - 在 Heroku 上托管 python-telegram-bot 总是在几秒钟后发生冲突
- javascript - 延迟加载 javascript 或 3 秒后加载
- neural-network - 对权重的校正是否也包括 Sigmoid 函数的导数?
- java - 通过javaFX中的线程更新ProgressBar
- scala - xsbt-web-plugin 中的 jetty:start 和 jetty:quickstart 有什么区别
- unity3d - 如何将关键帧添加到 Unity 中的新动画文件?
- flutter - 试图从小部件访问状态,可能使用了错误的设计
- javascript - 初始拒绝后在JS中重新提示相机权限
- c# - 使用 Caliburn Micro 绑定到 VM 时无法将子项添加到 Grid