我的PHP变量(wordpress短代码)内的引号未返回

问题描述 投票:1回答:2

我已经花了数小时的时间,但似乎无法找到解决问题的方法,因此我认为外表确实会有所帮助。

我已经编写了WordPress短代码,以更好地管理我的投资组合中的延迟加载图片。我正在使用占位符URL-encoded SVG以防止内容重排。

svg存储在变量中,并包含引号。 SVG将与其余的短代码一起返回。但是,不会返回SVG的xmlns元素周围的引号。

这是我的代码:


function img_shortcode( $atts , $content = null ) {

    // Attributes
    $atts = shortcode_atts(
        array(
            'caption' => 'no',
            'src' => '',
            'name' => 'media',
            'captionclass' => 'caption',
            'width' => '0',
            'height' => '0',
        ),
        $atts,
        'img'
    );

    $urlsvg = "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 ". $atts['width'] ." ". $atts['height'] ."'%3E%3C/svg%3E";

    if($atts['caption'] == 'yes')
    {
        return '<figure class="container"><img class="lozad" src="' . $urlsvg . '" data-src="' . $atts['src'] . '" alt="' . $atts['name'] . '" /><figcaption class="' . $atts['captionclass'] . '">'.$content.'</figcaption></figure>';
    }
    else{
        return '<img class="lozad" src="' . $urlsvg . '"  data-src="' . $atts['src'] . '" alt="' . $atts['name'] . '" />';
    }

}
add_shortcode( 'img', 'img_shortcode' );

这是返回的内容:

<figure class="container"><img class="lozad" src="data:image/svg+xml,%3Csvg xmlns=http://www.w3.org/2000/svg viewBox='0 0 1300 1248'%3E%3C/svg%3E" data-src="linktotheimage" alt="alttextofimg"><figcaption class="caption">Caption text.</figcaption></figure>

我绝不是PHP专家,实际上我确定我缺少对其他所有人来说最明显的东西,但我似乎无法看到阻止我的报价退回的原因。 。

我试图用双引号替换单引号,结果是相同的。

感谢,

php wordpress svg shortcode
2个回答
0
投票

[不确定为什么xmlns='..'的单引号没有返回到字符串中,但是对于viewBox='..'的单引号却没有返回。您的代码似乎很好。

您可以尝试的是名为escaping的内容,在此您使用反斜杠(\)删除字符具有的任何特殊含义。因此,例如,在您的代码中,您可以编写

$urlsvg = "data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ". $atts['width'] ." ". $atts['height'] ."\"%3E%3C/svg%3E";仅使用双引号。

Edit:导致此问题的原因是所谓的“ HTML Minifier”,它删除了"'字符。


0
投票

尝试在引号周围使用反斜杠:代替

$urlsvg = "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 ". $atts['width'] ." ". $atts['height'] ."'%3E%3C/svg%3E";

尝试

$urlsvg = "data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox='0 0 ". $atts['width'] ." ". $atts['height'] ."'%3E%3C/svg%3E";

反斜杠有望避免任何问题。

© www.soinside.com 2019 - 2024. All rights reserved.