允许在注册中使用非拉丁字符

时间:2011-01-20 作者:Ünsal Korkmaz

我来自土耳其,我们的字母表中有“şŞçĞÜÖıİ”字符。

我想在永久链接/slug/用户名中使用这些字符。我通过核心黑客技术找到了永久链接/slug的临时解决方案。除了核心黑客似乎没有其他选择。您可以在此处找到解决方案:

http://core.trac.wordpress.org/ticket/15248

我的问题是,在这之后,用户注册也需要一些修正。幸运的是,我可以使用过滤器,但无法处理它:

在wordpress中包括/格式化。php:

function sanitize_user( $username, $strict = false ) {
 $raw_username = $username;
 $username = wp_strip_all_tags( $username );
 $username = remove_accents( $username );
 // Kill octets
 $username = preg_replace( \'|%([a-fA-F0-9][a-fA-F0-9])|\', \'\', $username );
 $username = preg_replace( \'/&.+?;/\', \'\', $username ); // Kill entities

 // If strict, reduce to ASCII for max portability.
 if ( $strict )
  $username = preg_replace( \'|[^a-z0-9 _.\\-@]|i\', \'\', $username );

 $username = trim( $username );
 // Consolidate contiguous whitespace
 $username = preg_replace( \'|\\s+|\', \' \', $username );

 return apply_filters( \'sanitize_user\', $username, $raw_username, $strict );
}
这段代码产生错误:

 if ( $strict )
  $username = preg_replace( \'|[^a-z0-9 _.\\-@]|i\', \'\', $username );
不知何故,我需要禁用此部分。但我不知道怎么做。

1 个回复
最合适的回答,由SO网友:Rarst 整理而成

试试这个(没有经过测试,我希望我没有把它短路成无休止的循环):

add_filter(\'sanitize_user\', \'non_strict_login\', 10, 3);

function non_strict_login( $username, $raw_username, $strict ) {

    if( !$strict )
        return $username;

    return sanitize_user(stripslashes($raw_username), false);
}

结束

相关推荐

Encoding Method for URLs?

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