You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selectize渲染含引号的optgroup时丢失分组的解决办法咨询

问题:Selectize初始化后带引号的选项导致Optgroup消失

我在用Selectize(Select2的替代工具)初始化一个包含两个optgroup的多选字段时,其中一个optgroup直接消失了。排查后发现是选项值里的引号导致的——删掉带引号的选项,分组就能正常显示,但业务上必须保留这些符号。试过在Selectize配置里加diacritics: true,完全没用。

生成该HTML的PHP代码如下:

<select name="output_selected_columns[]" id="output_selected_columns" class="selectize" multiple="multiple">
    <optgroup label="<?php echo sprintf( __( 'Columns of %s', 'excellico' ), $file1 ); ?>">
        <?php
        foreach( $Excellico_Files->get_file_left_header() as $key => $value ) {
            ?>
            <option value="<?php echo esc_html( $value ); ?>"><?php echo esc_html( $value ); ?></option>
            <?php
        }
        ?>
    </optgroup>
    
    <optgroup label="<?php echo sprintf( __( 'Columns of %s', 'excellico' ), $file2 ); ?>">
        <?php
        foreach( $Excellico_Files->get_file_right_header() as $key => $value ) {
            ?>
            <option value="<?php echo esc_html( $value ); ?>"><?php echo esc_html( $value ); ?></option>
            <?php
        }
        ?>
    </optgroup>
</select>
解决方法

问题出在PHP转义函数的误用:esc_html()是用来转义HTML文本内容的,但option的value属性需要用属性专用的转义函数esc_attr()。

当选项值包含引号时,esc_html()不会转义属性内的引号,直接导致HTML结构被破坏,Selectize解析时出错,进而丢失整个optgroup。把代码中value属性里的esc_html()换成esc_attr()即可解决,同时optgroup的label属性也建议用esc_attr()转义,避免其他特殊字符引发问题。

修改后的代码:

<select name="output_selected_columns[]" id="output_selected_columns" class="selectize" multiple="multiple">
    <optgroup label="<?php echo esc_attr( sprintf( __( 'Columns of %s', 'excellico' ), $file1 ) ); ?>">
        <?php
        foreach( $Excellico_Files->get_file_left_header() as $key => $value ) {
            ?>
            <option value="<?php echo esc_attr( $value ); ?>"><?php echo esc_html( $value ); ?></option>
            <?php
        }
        ?>
    </optgroup>
    
    <optgroup label="<?php echo esc_attr( sprintf( __( 'Columns of %s', 'excellico' ), $file2 ) ); ?>">
        <?php
        foreach( $Excellico_Files->get_file_right_header() as $key => $value ) {
            ?>
            <option value="<?php echo esc_attr( $value ); ?>"><?php echo esc_html( $value ); ?></option>
            <?php
        }
        ?>
    </optgroup>
</select>

内容的提问来源于stack exchange,提问作者odedta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:30:48