微型MCE编辑器从SVG USE标记中剥离xlink:href参数

时间:2018-08-03 作者:Kathryn Wilson

我有一个内嵌SVG标记,带有嵌入的<;使用(>);标签

HTML:

<ul>
   <li><svg class="icon-user"><use xlink:href="#icon-user"></use></svg> My Account</li>
</ul>
我创建了一个过滤器函数来强制微型MCE编辑器不使用SVG标记。代码改编自post:use of <svg> tag into wordpress.

Filter function:

add_filter( \'tiny_mce_before_init\', \'fb_tinymce_add_pre\' );
function fb_tinymce_add_pre( $initArray ) {

   // Command separated string of extended elements
   $ext = \'svg[preserveAspectRatio|class|style|version|viewbox|xmlns],defs,use[xlink:href|x|y],linearGradient[id|x1|y1|z1]\';

    if ( isset( $initArray[\'extended_valid_elements\'] ) ) {
        $initArray[\'extended_valid_elements\'] .= \',\' . $ext;
    } else {
        $initArray[\'extended_valid_elements\'] = $ext;
    }
    // maybe; set tiny paramter verify_html
    //$initArray[\'verify_html\'] = false;

    return $initArray;
}
我修改了发布的解决方案,添加了SVG类、USE标记及其XLINK:HREF、X和Y参数。

问题是xlink:href参数被错误解释,导致在编辑器中切换到可视模式时代码被破坏。

HTML before switch to visual mode:

     <svg class="icon-user"><use xlink:href="#icon-user"></use></svg>

HTML after switch to visual mode:

     <svg class="icon-user"><use xlink="href"></use></svg>
我试过在xlink:href 函数参数如下:xlink\\:href, 尝试了冒号的编码值,如下所示:xlink%3Ahref 用引号括起来"xlink:href" 但一切都失败了。

我知道你可以使用HTML5标记嵌入svg,但如果我能得到一个持久的解决方案,我想尝试这种方法。

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

不幸的是,冒号是a TinyMCE control character

将属性强制为指定值。例如,“边框:0”

。。。因此,切换到xlink=href. 唯一明显的解决方案是通配符use[*]

使用控制字符? “分离属性验证值”,即。use[xlink?href]

结束

相关推荐

为内置钩子调用do_action和Apply_Filters是否安全?

我正在开发一个插件,它需要复制一些内置的WordPress逻辑。(此逻辑不能用任何内置方法调用,也不能独立连接到。)在这个动作序列中,WordPress的正常行为是调用动作挂钩(do_action(\'wp_login\', ...)) 和过滤器挂钩(apply_filters(\'login_redirect\', ...)).如果在对应于在Core中调用它们的时间点调用它们,那么直接从我的插件调用这些内置钩子是否安全(并且是可以接受的做法)?或者,其他与此相关的开发人员期望在非常特定的时间执行操作的风