一个给大师的:升级到3.x,只有带有重音字符的文件名才会出错

时间:2011-05-03 作者:Gaia

从2.8升级后。x(可能是2.9.x)到3.1.2,帖子中对包含重音字符的文件名(通常是图像)的所有引用都停止了工作。

在此之前,文件系统中显示的文件名(如“EXPRESSÃO.jpg”)将在post content HTML中正确地称为“EXPRESSÃO.jpg”。WP 3。x决定将这些引用转换为“EXPRESSÃO.jpg”(这是博客作者创建/上传时的文件名),因此现在所有具有此类字符的图像都是断开的链接。

只会损坏对文件名的引用。所有其他重音文本都可以正常工作。在通过SSH的perl脚本的帮助下,我能够获得具有特殊字符的所有文件的列表。

Tabel with all the mangled chars: http://pastebin.com/MMbjJphU(顺便问一下,这是哪张桌子?)

wp-config 节目(是的,我已经试着把它们评论掉了)

define(\'DB_CHARSET\', \'\');
define(\'DB_COLLATE\', \'\');
mySQL shows:

DB Collation in effect: latin1_swedish_ci    
default DB Collation: latin1_swedish_ci    
Tables Collation: latin1_swedish_ci    
Columns Collation: latin1_swedish_ci
whats the quickest way to solve this problem? 据我所见,我有两种选择:

A) 我可以重命名文件以使用正确的拼写(EXPRESSÃO.jpg->EXPRESSÃO.jpg)。我倾向于这样。Maybe someone could help with a php/perl/python script that would rename the files?

B) 我可以批量更新phpmyadmin中的wp帖子,开始使用所有这些奇怪的字符(EXPRESSÃO.jpg->EXPRESSÃO.jpg)。

1 个回复
SO网友:Steven

也许你应该考虑选项C)
将所有重音字符转换为普通UTF-8字符
SoEXPRESSÃO.jpg -> EXPRESSAO.jpg

我认为这将对您有很大帮助,不仅在编码和文件系统方面,而且在数据库中存储名称/引用。

Update

这是我用来消除口音的函数。我在网上找到了这个解决方案。

  function sanitizeName($name)
  {
      $pattern = array("\'é\'", "\'è\'", "\'ë\'", "\'ê\'", "\'É\'", "\'È\'", "\'Ë\'", "\'Ê\'", "\'á\'", "\'à\'", "\'ä\'", "\'â\'", "\'å\'", "\'Á\'", "\'À\'", "\'Ä\'", "\'Â\'", "\'Å\'", "\'ó\'", "\'ò\'", "\'ö\'", "\'ô\'", "\'Ó\'", "\'Ò\'", "\'Ö\'", "\'Ô\'", "\'í\'", "\'ì\'", "\'ï\'", "\'î\'", "\'Í\'", "\'Ì\'", "\'Ï\'", "\'Î\'", "\'ú\'", "\'ù\'", "\'ü\'", "\'û\'", "\'Ú\'", "\'Ù\'", "\'Ü\'", "\'Û\'", "\'ý\'", "\'ÿ\'", "\'Ý\'", "\'ø\'", "\'Ø\'", "\'œ\'", "\'Œ\'", "\'Æ\'", "\'ç\'", "\'Ç\'");
      $replace = array(\'e\', \'e\', \'e\', \'e\', \'E\', \'E\', \'E\', \'E\', \'a\', \'a\', \'a\', \'a\', \'a\', \'A\', \'A\', \'A\', \'A\', \'A\', \'o\', \'o\', \'o\', \'o\', \'O\', \'O\', \'O\', \'O\', \'i\', \'i\', \'i\', \'I\', \'I\', \'I\', \'I\', \'I\', \'u\', \'u\', \'u\', \'u\', \'U\', \'U\', \'U\', \'U\', \'y\', \'y\', \'Y\', \'o\', \'O\', \'a\', \'A\', \'A\', \'c\', \'C\');        

      $name = preg_replace($pattern, $replace, $name);      
      return $name;
  }
因此,您可以读取所有文件,使用此功能清除名称,并使用新名称保存文件。

最后,我放弃了重音符号,现在我将所有重音符号转换为HTML Equalant。所以Abaeté; 存储为Abaeté 在我的数据库中。

结束

相关推荐

Encoding Method for URLs?

WordPress是否有一种编码URL的方法或API,类似于在URL中使用标题时生成部分URL的方式?我正在编写一个生成URL的插件,并希望使用与其他所有插件相同的方法。例如,我在标题中键入“这是我的博客文章”,然后生成“这是我的博客文章”。