2012-04-18 51 views
0

我有一些旧的永久链接(帖子,页面,标签),其中包含非法字符 - 而且这些字段不再有效。URL中的非法字符

在以前的WP版本中,它允许使用非拉丁字符,但在更新的版本中更改。

有什么办法从这些永久链接清理数据库(将它们转换为允许的格式)?

+2

url标准没有任何改变。 – 2012-04-18 09:46:22

+0

如何将一个非拉丁字符转换为拉丁字符?您可以尝试使用正则表达式来移除所述字符。 – Srijan 2012-04-18 09:56:05

回答

1

如果您知道这些字符是什么以及想要替换它们,可以编写一个简单的PHP脚本来从数据库中获取数据,然后使用preg_replace()修复PHP端的字符,然后更新与修复表的表。下面是我想出的一个简单例子:

$query = "SELECT field, primarykey FROM table WHERE field LIKE "(weird character)"; 
/* run the query, blah blah */ 
$result = mysql_query($query); 
$weird_character = "/weird character/"; 
$good_character = "good character"; 
$replace = "UPDATE table SET field='$field' WHERE field='$row['field']'"; 
while($row=mysql_fetch_array($result, MYSQL_ASSOC)) 
{ 
$field = preg_replace($bad_character, $good_character, $row['field']); 
$replace_result = mysql_query($replace); 
} 

如果您有大量的链接,这将需要永久。如果它的数量很少,这应该足够高效,无论如何你只能运行一次。

3

您可以在您所有的帖子

$posts = get_posts(array('post_type' => array('post', 'page')) 
foreach($posts as $post) 
{ 

$post[post_name] = sanitize_title($title); 

    wp_update_post($post); 

} 
+0

任何想法如何使用标签做到这一点? – user1165454 2012-04-18 14:50:28

+0

也许用$ terms = get_terms('post_tag')和'foreach($ terms作为$ term){wp_update_term($ term-> term_id,'post_tag',array('slug'=> sanitize_title($ term-> name) ))}' – 2012-04-18 16:43:03

0

您还可以,如果你需要修改,当然网址中使用标准的WordPress功能esc_url_raw使用WordPress的功能sanitize_title($title);。此功能可以消除无效字符,删除危险字符,并验证url是否有适当的协议集(http,https,ftp等):

esc_url_raw($current_url);