服务器迁移后在图像文件名中编码的特殊字符

时间:2015-10-25 03:07:55

标签: php wordpress encoding

我已将WordPress网站从Hostgator共享主机迁移到Ubuntu数字海洋LAMP堆栈。

导出具有特殊字符的图像文件(例如文件)时出现问题 operários_tarsila-1024x640.jpg

当WordPress尝试访问该文件时,它会显示错误。我找到了原因:

我可以通过Inspect Element看到Wordpress试图调用:http://mywebsite.com/wp-content/uploads/2013/02/oper%C3%A1rios_tarsila-1024x640.jpg并且服务器返回404错误。

但是,如果我在浏览器中输入此网址:http://mywebsite.com/wp-content/uploads/2013/02/opera%CC%81rios_tarsila-1024x640.jpg它可以正常工作并显示图片。

因此,从á%C3%A1字符)á + a + %CC%81 {组合精确重音'的character编码之间似乎存在差异是什么导致WordPress不显示我的图像。

所以现在我的服务器中有数千个带有结构combining accent + accented character的重音图像文件名,WordPress调用结构为{{1}}的图像文件名。

bash有没有办法用comparisson表重命名所有这些?或者是一种让Apache意识到这些差异的方法,并在发生这种混乱时指向正确的文件?

7 个答案:

答案 0 :(得分:8)

显然问题是如何在新服务器上解压缩备份。

有两种方法可以解决这个问题:

  1. 通过不带重音的名称手动重命名文件,然后修改数据库并更改数据库中的文件名(此maluco可能很危险,最好备份数据库)。

  2. 使用Filezilla上传文件,但将其设置为强制使用UTF-8进行字符集编码。

  3. 文件>网站管理员> {您的网站}> Tab Charset>强制UTF-8

答案 1 :(得分:1)

您是否尝试在PHP脚本,Mysql和HTML中设置相同的编码?

PHP:http://php.net/manual/en/function.mb-internal-encoding.php

Mysql:http://php.net/manual/en/function.mysql-set-charset.php

HTML:<meta http-equiv="content-type" content="text/html; charset=utf-8" />

这个问题看起来像是所有这些语言之间的字符集问题。

如果这不起作用,则必须使用小脚本重命名所有图片,使用如下函数:

function wd_remove_accents($str, $charset='utf-8')
{
    $str = htmlentities($str, ENT_NOQUOTES, $charset);

    $str = preg_replace('#&([A-za-z])(?:acute|cedil|caron|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
    $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. '&oelig;'
    $str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères

    return $str;
}

来源:http://www.weirdog.com/blog/php/supprimer-les-accents-des-caracteres-accentues.html

答案 2 :(得分:1)

我们在wordpress部署中遇到了与法语字符类似的问题,我们的解决方案是从PC上传FileZilla文件,而不是从Mac上传FileZilla。

当我从mac OSX上传到CentOS服务器时,只有在以+ + CC%81格式调用时才显示文件。

当我从PC上传文件时,apache找到了%C3%A1格式的文件,这就是wordpress对它们进行编码的方式。

答案 3 :(得分:1)

我们有同样的问题-Mac + FileZilla + SK语言中的特殊字符。

使用其他FTP客户端(在本例中为Cyber​​duck)解决的问题。

FileZilla文件名编码似乎存在问题。强制utf8编码(FileZilla主机设置)无济于事。

答案 4 :(得分:0)

所以,只是触及这个问题和一个对我有用的解决方案......我还迁移了一个Wordpress网站,发现所有文件名中带有特殊字符的图像在迁移后产生了404.

我最终不得不通过phpMyAdmin进行手动文件重命名和编辑到数据库。这是艰巨的,我绝对建议先备份你的数据库。

在我的情况下,我有大量的媒体附件在其文件名中使用了特殊字符©

首先,我通过删除字符在本地重命名了文件。我用了1-4a rename。刚找到文件名并替换它什么都没有(甚至没有空格)。然后,我从/wp-content/uploads/文件夹中删除了所有旧文件,并将其替换为新文件。

接下来,我进入我的数据库来更新表值。媒体附件的信息存储在wp_postswp_postmeta表中。下面是我运行以更新两者的SQL -

update wp_posts set guid = replace(guid,'©','');

UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, '©', '') 
WHERE LOWER(RIGHT(meta_value, 5)) = '.jpeg' OR 
LOWER(RIGHT(meta_value, 4)) IN ('.jpg', '.gif', '.png')

再次,我们正在用什么都没有取代角色,甚至没有空格。

我必须使用WP plugin Regenerate Thumbnails以便更新所有缩略图+各种附件尺寸,但这样做了。

我非常感谢大家在这篇文章上所做的努力,并this post帮助我解决这个问题!希望这有助于某人!

答案 5 :(得分:0)

如果您有 WP_CLI,请运行此 BashScript。您必须更改 "dev": "TAILWIND_TOUCH_DIR='/var/www/html/.tailwindcss/touch' svelte-kit dev" 表前缀。 它只修改不是 FORM_D 格式的文件名。 备份您的数据库,以防万一出现问题。

wp_

答案 6 :(得分:0)

有一个插件可以解决这种情况。 您可以查看Media File Renamer