我已将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意识到这些差异的方法,并在发生这种混乱时指向正确的文件?
答案 0 :(得分:8)
显然问题是如何在新服务器上解压缩备份。
有两种方法可以解决这个问题:
通过不带重音的名称手动重命名文件,然后修改数据库并更改数据库中的文件名(此maluco可能很危险,最好备份数据库)。
使用Filezilla上传文件,但将其设置为强制使用UTF-8进行字符集编码。
文件>网站管理员> {您的网站}> 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. 'œ'
$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客户端(在本例中为Cyberduck)解决的问题。
FileZilla文件名编码似乎存在问题。强制utf8编码(FileZilla主机设置)无济于事。
答案 4 :(得分:0)
所以,只是触及这个问题和一个对我有用的解决方案......我还迁移了一个Wordpress网站,发现所有文件名中带有特殊字符的图像在迁移后产生了404.
我最终不得不通过phpMyAdmin进行手动文件重命名和编辑到数据库。这是艰巨的,我绝对建议先备份你的数据库。
在我的情况下,我有大量的媒体附件在其文件名中使用了特殊字符©
。
首先,我通过删除字符在本地重命名了文件。我用了1-4a rename。刚找到文件名并替换它什么都没有(甚至没有空格)。然后,我从/wp-content/uploads/
文件夹中删除了所有旧文件,并将其替换为新文件。
接下来,我进入我的数据库来更新表值。媒体附件的信息存储在wp_posts
和wp_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