Normally this type of thing should be filed as a bug report: http://code.google.com/p/wordpress-php-snippets/issues/list
I looked into this… the culprit is WordPress. Check out wp-includes/shortcodes.php:
function shortcode_parse_atts($text) {
$atts = array();
$pattern = '/(\w+)\s*=\s*"([^"]*)"(?:\s|$)|(\w+)\s*=\s*\'([^\']*)\'(?:\s|$)|(\w+)\s*=\s*([^\s\'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|(\S+)(?:\s|$)/';
$text = preg_replace("/[\x{00a0}\x{200b}]+/u", " ", $text);
if ( preg_match_all($pattern, $text, $match, PREG_SET_ORDER) ) {
foreach ($match as $m) {
if (!empty($m[1]))
$atts[strtolower($m[1])] = stripcslashes($m[2]);
elseif (!empty($m[3]))
$atts[strtolower($m[3])] = stripcslashes($m[4]);
elseif (!empty($m[5]))
$atts[strtolower($m[5])] = stripcslashes($m[6]);
elseif (isset($m[7]) and strlen($m[7]))
$atts[] = stripcslashes($m[7]);
elseif (isset($m[8]))
$atts[] = stripcslashes($m[8]);
}
} else {
$atts = ltrim($text);
}
return $atts;
}
All those instances of strtolower is what’s causing this. It’s good to know… I had no idea WP was forcing arguments to be lower-case…. that’s kinda dumb. I filed a bug in the WordPress bug-tracker: http://core.trac.ww.wp.xz.cn/ticket/20077
Hi Mr Socks,
Thanks for looking into this. One to watch out for!
Best wishes,
Alex