Skip to content

Special characters not showing up in widgets #6326

@TommyKolkman

Description

@TommyKolkman

Magento widgets strip special characters like a "+".

If I add something like:

{{widget type="Elephant\CFTextAndImage\Block\Widget\CFTextAndImage" language="nl_nl" title_default="++Hallo++"}}

The plusses are stripped. Now, in this case that's not that much of a problem, but in some cases we use base64 values there. When the base64 value has a plus, the value is instantly corrupted.

I've tried to track it down and came to the conclusion that there is a problem with the following file:

https://github.com/magento/magento2/blob/develop/lib/internal/Magento/Framework/Filter/Template.php

The problem is in the tokenizer.

 /**
     * Return associative array of parameters.
     *
     * @param string $value raw parameters
     * @return array
     */
    protected function getParameters($value)
    {
        $tokenizer = new Template\Tokenizer\Parameter();
        $tokenizer->setString($value);
        $params = $tokenizer->tokenize();
        foreach ($params as $key => $value) {
            if (substr($value, 0, 1) === '$') {
                $params[$key] = $this->getVariable(substr($value, 1), null);
            }
        }
        return $params;
    }

The $value, before added to the tokenizer is still correct. Afterwards, however, it's missing the plusses.

Now, I've tried writing up my own replacement for the tokenizer as quick fix, but that won't do. Can you guys fix this?

Temp fix (via di.xml of course):

    // $params = $tokenizer->tokenize();

    $params         = array();
    $count          = 0;
    $widget_values  = explode( '"', $value );
    $param_key      = '';

    foreach( $widget_values as $widget_value ){
        if( $count == 2 ){
            $count = 0;
        }
        if( $count == 0 ){
            // It's a key
            $param_key = trim( rtrim( $widget_value, '=' ) );
        } else {
            // It's a value
            $params[ $param_key ] = trim( $widget_value );
        }
        $count++;
    }

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions