Why does WP_Query strip colons from tag names?

I’m using WP_Query to select a specific set of posts:

$args = array ( 'orderby'=>'rand', 'posts_per_page' => 1, 'category_name'=>'exercise', 'tag' => 'org:abc' );
$the_query = new WP_Query( $args );

but, when I run the query, it seems to be stripping the colon (:) in the tag name, so the query (when you output it) is searching for tag=’orgabc’, rather than ‘org:abc’.

This also seems to happen with =, i.e. ‘org=abc’

I’ve had to change my taxonomy as a result, but does anyone know why the colon is being stripped? is this a special character?

Solutions Collecting From Web of "Why does WP_Query strip colons from tag names?"

The tag parameter should be the tag’s slug. If you look at your tag’s archive URL (the view link when editing the tag), it won’t have the colon in it, because that’s not a legal character in a URL.

Your tag’s name can still have the colon, and you can use the URLencoded version of a colon %3A in the slug if you want, though you will have to manually enter that in the slug field.