该插件在激活期间生成了3个字符的意外输出

时间:2016-09-04 作者:Blotark

我正在为广告商的show name创建一个WordPress小部件。

当我尝试激活插件时,出现了一个错误

The plugin generated 3 characters of unexpected output during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin.

我做了以下事情:

1-删除PHP打开或关闭标记前后的空白

2-将编码更改为UTF8-BOM

<?php
class adsMain extends WP_Widget {

    public function __construct() {

        parent::__construct(
            \'adsMain\',
            __( \'تبلیغات\', \'text\' ),
            array(
                \'classname\'   => \'adsMain\',
                \'description\' => __( \'برای ایجاد تبلیغات جدید این کادر را به مکان دلخواه خود بکشید.\', \'text\' )
            )
        ); 
    }
    /**  
     * Front-end display of widget.
     *
     * @see WP_Widget::widget()
     *
     * @param array $args     Widget arguments.
     * @param array $instance Saved values from database.
     */
    public function widget( $args, $instance ) {

        extract( $args );

        $advertiser = apply_filters( \'widget_title\', $instance[\'advertiser\'] );

        echo $advertiser;

    }

    /**
      * Sanitize widget form values as they are saved.
      *
      * @see WP_Widget::update()
      *
      * @param array $new_instance Values just sent to be saved.
      * @param array $old_instance Previously saved values from database.
      *
      * @return array Updated safe values to be saved.
      */
    public function update( $new_instance, $old_instance ) {

        $instance = $old_instance;

        $instance[\'advertiser\'] = strip_tags( $new_instance[\'advertiser\'] );

        return $instance;

    }

    /**
      * Back-end widget form.
      *
      * @see WP_Widget::form()
      *
      * @param array $instance Previously saved values from database.
      */
    public function form( $instance ) {

        $advertiser = ( isset($instance[\'advertiser\']) ? esc_attr ( $instance[\'advertiser\'] ) : \'\' );
?>

        <p>
            <label for="<?php echo $this->get_field_id(\'advertiser\'); ?>"><?php _e(\'نام شخص / شرکت تبلیغ دهنده:\'); ?></label>
            <input class="widefat" id="<?php echo $this->get_field_id(\'advertiser\'); ?>" name="<?php echo $this->get_field_name(\'advertiser\'); ?>" type="text" value="<?php echo $advertiser; ?>" />
        </p>
<?php
    }

}

/* Register uploader */
add_action (\'admin_enqueue_scripts\', function () {
    wp_register_script(\'adsMain-script\' , plugins_url( \'/js/adsMain-script.js\', __FILE__ ), array( \'jquery\' ), \'20160904\', true );
    wp_enqueue_script(\'adsMain-script\');
    wp_enqueue_media();
});

/* Register the widget */
add_action(\'widgets_init\', function() {
     register_widget( \'adsMain\' );
});
?>

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

什么是BOM?

UTF-8byte order mark 或者只是UTF-8 BOM 是帮助读者理解当前文档编码的一系列字节。

这3个字节是:

EF BB高炉

或者简单地使用Unicode字符:U+FEFF

在编码为BOM的插件文件中,调用模板时将输出这些字节,从而导致标头中的早期输出,从而触发常见错误:

插件在激活期间生成了X个字符的意外输出。

这也可能发生在主题的文件上。因为不建议对UTF-8文件使用BOMUnicode Standards, 您可以将模板另存为UTF-8 without BOM.

您还将注意到,在BOM下编码的每个UTF-8文件至少有3个字节的大小,即使它是空的。