web-dev-qa-db-ja.com

KSESによるSVGの回避

SVGファイルをテンプレートで出力しようとしていますが、出力をエスケープする必要があるとPHPCSから指示されています。そこで私はKSESを試しましたが、viewbox属性を含めたくないようです。

 $allowed_html = array(
  'svg' => array(
    'xmlns' => array (),
    'viewBox' => true
  ),
  'path' => array(
    'd'=> array(),
  ),
);

 wp_kses(file_get_contents( $logo ), $allowed_html ) 

なぜこれがうまくいかないのですか?

1
Picard102

私が答えを探していたときにあなたの質問を見つけました。私はもう少しwp_ksesを試してみましたが、引数の小文字のviewboxが問題を解決するようです。 SVGの実際の属性を小文字にする必要はありません。引数wp_kses()だけです。

これはあなたが必要とする以上のものかもしれませんが、これが私が今使っているものです:

<?php
$kses_defaults = wp_kses_allowed_html( 'post' );

$svg_args = array(
    'svg'   => array(
        'class' => true,
        'aria-hidden' => true,
        'aria-labelledby' => true,
        'role' => true,
        'xmlns' => true,
        'width' => true,
        'height' => true,
        'viewbox' => true, // <= Must be lower case!
    ),
    'g'     => array( 'fill' => true ),
    'title' => array( 'title' => true ),
    'path'  => array( 'd' => true, 'fill' => true,  ),
);

$allowed_tags = array_merge( $kses_defaults, $svg_args );

echo wp_kses( $rich_text_that_might_include_SVGs, $allowed_tags );
2
mrwweb