0

我已将我的 Drupal 站点移至新服务器。不幸的是,现在我所有名称中包含波兰字母的文件链接都已损坏。

我查看了脚本/数据库/文件系统以找出问题所在,并发现以下内容:

  • Drupal 显示以下错误:

/sites/default/files/Baranowska_Badania%20naukowe%20i%20testowanie%20nowych%20lek%C3%B3w%20na%20ludziach%20i%20zwierz%C4%99tach-aspekt%20prawny%20i%20etyczny_0.pdf

  • 该文件存在于服务器上并且可以通过以下链接访问:
 http://ppes.mage.pl/sites/default/files/Baranowska_Badania%20naukowe%20i%20testowanie%20nowych%20lekow%20na%20ludziach%20i%20zwierzetach-aspekt%20prawny%20i%20etyczny_0.pdf
  • 在 mysql 中,文件链接如下所示:
public://Baranowska_Badania naukowe i testowanie nowych leków na ludziach i zwierzętach-aspekt prawny i etyczny_0.pdf

如您所见,问题出在链接编码上。SQL 中的文件名包含波兰字母,而 Linux 系统上的真实文件名没有。

我想问你是否有任何简单的方法来解决这个问题,或者唯一的方法是手动将数据库中的所有波兰字符替换为它们各自的非波兰字符(例如。“ę”=>“e”;“ó " => "o")?

4

2 回答 2

1
  1. 使用音译模块,它将所有文件名转换为 US-ASCII。
  2. 检查本地主机和远程服务器上的数据库字符集和排序规则。https://dev.mysql.com/doc/refman/5.0/en/charset-applications.html
于 2015-09-27T09:22:20.763 回答
0

最后我执行了以下查询:

     UPDATE file_managed SET `filename` = REPLACE(`filename`, 'ą́', 'a');
        UPDATE file_managed SET `filename` = REPLACE(`filename`, 'ę', 'e');
        UPDATE file_managed SET `filename` = REPLACE(`filename`, 'ż', 'z');
        UPDATE file_managed SET `filename` = REPLACE(`filename`, 'ź', 'z');
        UPDATE file_managed SET `filename` = REPLACE(`filename`, 'ó', 'o');
        UPDATE file_managed SET `filename` = REPLACE(`filename`, 'ś', 's');
        UPDATE file_managed SET `filename` = REPLACE(`filename`, 'ć', 'c');
        UPDATE file_managed SET `filename` = REPLACE(`filename`, 'Ś', 'S');
        UPDATE file_managed SET `filename` = REPLACE(`filename`, 'Ź', 'Z');
        UPDATE file_managed SET `filename` = REPLACE(`filename`, 'Ż', 'Z');
        UPDATE file_managed SET `filename` = REPLACE(`filename`, 'Ń', 'N');
     UPDATE file_managed SET `filename` = REPLACE(`filename`, 'ń', 'n');
     UPDATE file_managed SET `filename` = REPLACE(`filename`, 'Ł', 'L');
 UPDATE file_managed SET `filename` = REPLACE(`filename`, 'ł', 'l');

UPDATE file_managed SET `uri` = REPLACE(`uri`, 'Ł', 'L');
    UPDATE file_managed SET `uri` = REPLACE(`uri`, 'ł', 'l');
        UPDATE file_managed SET `uri` = REPLACE(`uri`, 'ą́', 'a');
        UPDATE file_managed SET `uri` = REPLACE(`uri`, 'ę', 'e');
        UPDATE file_managed SET `uri` = REPLACE(`uri`, 'ż', 'z');
        UPDATE file_managed SET `uri` = REPLACE(`uri`, 'ź', 'z');
        UPDATE file_managed SET `uri` = REPLACE(`uri`, 'ó', 'o');
        UPDATE file_managed SET `uri` = REPLACE(`uri`, 'ś', 's');
        UPDATE file_managed SET `uri` = REPLACE(`uri`, 'ć', 'c');
        UPDATE file_managed SET `uri` = REPLACE(`uri`, 'Ś', 'S');
        UPDATE file_managed SET `uri` = REPLACE(`uri`, 'Ż', 'Z');
        UPDATE file_managed SET `uri` = REPLACE(`uri`, 'Ź', 'Z');
    UPDATE file_managed SET `uri` = REPLACE(`uri`, 'Ń', 'N');
        UPDATE file_managed SET `uri` = REPLACE(`uri`, 'ń', 'n');
于 2015-10-18T18:41:47.393 回答