How do I escape a ‘]’ in a short code?

The question:

How do I escape a right bracket in a short code?

I’m working on a Google Map plugin that has encoded points. Sometimes the polygons have the ] in it, which makes WP think that it’s the end of the shortcode.

For example:

[my_shortcode latitude='36.93'  longitude='-72.98' encoded_points='ortlF~g]tM?cZEH`z]}|@DQfi]' ]

I’ve tried ] which is isn’t causing a problem for WP, but it is causing a problem for my Google map code. I could use Regex to replace ], but maybe there is a simpler way. Does shortcode have an escape character?

The Solutions:

Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.

Method 1

I don’t know of an official escape syntax for shortcodes and there likely isn’t one.

When wordpress parses for shortcodes it looks for [ and ]. If you want to use square brackets within a shortcode, using the respective html ASCII entities escapes them.

I.e. replacing [ by [ and ] by ]. WordPress will not recognize ] as the end of the shortcode.

Whether that serves your purpose obviously depends on whether it gets converted to ] before being passed to the Google Maps API or whether the API handles it as expected. I have no experience with that, so can’t say.

Method 2

There seems to be an official page here : Escaping Shortcodes

Extract :

To do this, you need to escape the shortcode by using two sets of
brackets instead of just one. So to display this in your post:

You would write this:

Method 3

Based on the Johannes Pille’s answer there is wp function to escape square brackets for using text in shortcode parameters:

function my_esc_brackets($text = ''){
    return str_replace( [ "[" , "]" ] , [ "[" , "]" ] , $text );
}

Often people suggest using shortcode’s $content for text parameters, but there are cases when the shortcode has many such text parameters.

Method 4

Even if you are NOT playing with url, use urldecode(your attribute_value) with %5B and %5D used as replacement for [ and ] in your attribute_value.

Your code may then look like this :

In your wp page : [my_shortcode myattr="%5Bmyattribute_value%5D"]

Then, in your shortcode function, just do this :

 $origvalue=urldecode($atts['myattr']);

This will restore the [ and ] characters in the $origvalue, so that $origvalue now contains : [myattribute_value]

TIP : If you are playing with url, do the same, but add the following to the function code :

$urlvalue = urlencode($origvalue);

If that is not clear : YES, I am doing urlencode(urldecode(some value from $atts)) to build a correct part of an url.

Quite simple, hope this helps.

Pierre

Method 5

The easiest solution – if only one attribute needs escaping is to use shortcodes in the open / close tag version like so:

[my_shortcode latitude='36.93'  longitude='-72.98']ortlF~g]tM?cZEH`z]}|@DQfi][/my_shortcode]

then you get your problematic content as the second argument $content (the first is $attr).

You can check the documentation on that to get more info.

Method 6

This is an old question, but here’s a workaround using css. In place of braces, enclose characters in a span, like so:

<span class="bracket">some string</span>

then, add this to the theme stylesheet:

span.bracket:before {
  content: '['
}
.colored-blocks span.bracket:after {
  content: ']'
}

the result will look like this:

[some string]


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Comment