如果名称使用其他语言或特殊字符,为什么不显示图像?

时间:2018-01-28 07:13:02

标签: php mysql

好吧,

在我的数据库表格中,我将图像名称设置为D@ääö#-09710.jpg。当我调用表格数据时,所有数据都会显示,但由于此名称而未显示此图像!!!

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

SRC = “images/users/D@üäö#-09710.jpg”

即使使用此名称成功上传图片:

D@üäö#-09710.jpg

但是当我使用此图片网址直接查看图片时,浏览器会显示我:

  

请求的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

1 个答案:

答案 0 :(得分:2)

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