【问题标题】:Why the image is not showing if the name is using another language or special characters?如果名称使用其他语言或特殊字符,为什么图像不显示?
【发布时间】:2018-01-28 07:13:02
【问题描述】:

嗯,

在我的数据库表中,我将图像名称设置为 D@üäö#-09710.jpg。当我调用表格数据时,所有数据都显示,除了这个图像因为这个名字没有显示!!!

我通过检查元素进行了检查,它向我展示了:

src="images/users/D@üäö#-09710.jpg"

连图片都用这个名字成功上传了:

D@üäö#-09710.jpg

但是当我使用这个图像 URL 直接查看图像时,浏览器会显示我:

请求的 URL /xxx/xxxx/images/users/D@üäö 不是 在此服务器上找到。

另一个奇怪的事情是,当我从浏览器复制 URL 并将其粘贴到这里时,它看起来像这样:

http://localhost/xxx/xxxx/images/users/D@%C3%BC%C3%A4%C3%B6#.jpg

所以看起来特殊字符没有正确读取!

PHP页眉是这样的:

<?php require_once('admin/init.php'); ?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">    
    <meta name="description" content="">
    <meta name="keywords" content="">    
    <title>ccrroipr</title>    
    <?php require_once('includes/css.php'); ?>
</head>
<body>

PHP 连接:

try {
    $this->_pdo = new PDO('mysql:host=' . Config::get('mysql/host') . ';dbname=' . Config::get('mysql/database'), Config::get('mysql/username'), Config::get('mysql/password'), array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"));
    $this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $this->_pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch(PDOException $e) {
    die($e->getMessage());
}

数据库排序规则是:

utf8mb4_unicode_ci

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    网址不能包含所有这些字符,请参阅Characters allowed in a URL 了解更多信息。您必须使用urlencode() 将URL 从D@üäö#-09710.jpg 转换为D%40%C3%BC%C3%A4%C3%B6%23-09710.jpg。您可以保持文件名和数据库条目不变(假设您的文件系统可以处理字符),但在创建链接时使用 urlencode。

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多