字符被bbcode插件取代

时间:2011-11-16 23:01:11

标签: php wordpress plugins bbcode

我有一个用于wordpress的bbcode插件。

但出于某种原因,如果我发布类似

的内容

[i]v497212he2x2MfMi[/i]“X”字符输出为×,这是另一种X.我该如何解决这个问题?

插件代码如下:

    class BBCode { 

    // Plugin initialization 
    function BBCode() { 
        // This version only supports WP 2.5+ (learn to upgrade please!) 
        if ( !function_exists('add_shortcode') ) return; 

        // Register the shortcodes 
        add_shortcode( 'b' , array(&$this, 'shortcode_bold') ); 
        add_shortcode( 'i' , array(&$this, 'shortcode_italics') ); 
    } 


    // No-name attribute fixing 
    function attributefix( $atts = array() ) { 
        if ( empty($atts[0]) ) return $atts; 

        if ( 0 !== preg_match( '#=("|\')(.*?)("|\')#', $atts[0], $match ) ) 
            $atts[0] = $match[2]; 

        return $atts; 
    } 


    // Bold shortcode 
    function shortcode_bold( $atts = array(), $content = NULL ) { 
        if ( NULL === $content ) return ''; 

        return '<strong>' . do_shortcode( $content ) . '</strong>'; 
    } 


    // Italics shortcode 
    function shortcode_italics( $atts = array(), $content = NULL ) { 
        if ( NULL === $content ) return ''; 

        return '<em>' . do_shortcode( $content ) . '</em>'; 
    } 

} 

// Start this plugin once all other plugins are fully loaded 
add_action( 'plugins_loaded', create_function( '', 'global $BBCode; $BBCode = new BBCode();' ) );

1 个答案:

答案 0 :(得分:1)

这种转换正在发生,因为Wordpress的wptexturize()函数返回给定文本,其中引号转换为智能引号,撇号,短划线,椭圆,商标符号和乘法符号。

这是来自WP 3.2.1 wp-includes / formatting.php第55行:

$dynamic_characters = array('/\'(\d\d(?:&#8217;|\')?s)/', '/\'(\d)/', '/(\s|\A|[([{<]|")\'/', '/(\d)"/', '/(\d)\'/', '/(\S)\'([^\'\s])/', '/(\s|\A|[([{<])"(?!\s)/', '/"(\s|\S|\Z)/', '/\'([\s.]|\Z)/', '/\b(\d+)x(\d+)\b/');
$dynamic_replacements = array('&#8217;$1','&#8217;$1', '$1&#8216;', '$1&#8243;', '$1&#8242;', '$1&#8217;$2', '$1' . $opening_quote . '$2', $closing_quote . '$1', '&#8217;$1', '$1&#215;$2');

$dynamic_characters数组中的最后一个正则表达式是将“X”变为×

如wptexturize ... "[t]ext enclosed in the tags <pre>, <code>, <kbd>, <style>, <script>, <tt>, and [code] will be skipped."的功能页面所述,您可以通过将bbcode放入其中一个标记中来解决此问题,或使用可禁用wptexturize的插件,例如InScriptDisablerDisable wptexturize