Символы заменяются плагином bbcode - PullRequest
1 голос
/ 17 ноября 2011

У меня есть плагин BBcode для WordPress.

Но по какой-то причине, если я напишу что-то вроде

[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 Ответ

1 голос
/ 24 ноября 2011

Это преобразование происходит из-за функции wptexturize () в Wordpress, которая возвращает заданный текст с преобразованиями кавычек в умные кавычки, апострофы, тире, эллипсы, символ товарного знака и символ умножения.

Это из WP 3.2.1 строка 55 wp-includes / formatting.php:

$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, например InScript или Disabler или Disable wptexturize .

...