Кавычки внутри моей переменной PHP (шорткод wordpress) не возвращаются - PullRequest
1 голос
/ 29 сентября 2019

Я потратил на это часы и не могу найти способ решить мою проблему, поэтому подумал, что внешний взгляд действительно поможет.

Я запрограммировал шорткод WordPress для лучшего управления загруженными фотографиями в моем портфолио. Я использую местозаполнитель URL-кодированный SVG для предотвращения перекомпоновки содержимого.

svg хранится в переменной и содержит кавычки. SVG возвращается с остальным шорткодом. Однако кавычки, окружающие элемент xmlns SVG, не возвращаются.

Вот мой код:


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, на самом деле я уверенчто я упускаю что-то, что будет наиболее очевидным для всех остальных, но я не могу понять, что мешает вернуть мои цитаты.

Я пытался заменить одинарные кавычки на двойные, и результат был таким же.

Спасибо,

Ответы [ 2 ]

0 голосов
/ 29 сентября 2019

Не уверен, почему ваши одинарные кавычки не возвращаются в вашей строке для xmlns='..', но тогда для viewBox='..' они есть. Ваш код, кажется, в порядке.

То, что вы можете попробовать, это то, что называется , экранирующий , где вы используете обратную косую черту (\), чтобы удалить любое особое значение, которое имеет персонаж. Так, например, в вашем коде вы можете написать

$urlsvg = "data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ". $atts['width'] ." ". $atts['height'] ."\"%3E%3C/svg%3E";, который использует только двойные кавычки.

Редактировать: причиной этой проблемы был так называемый «HTML Minifier», который удалял символы " или '.

0 голосов
/ 29 сентября 2019

Попробуйте использовать обратную косую черту в кавычках: вместо

$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";

Обратная косая черта должна, как мы надеемся, избежать любых проблем.

...