So now I can see where your problem is. If you have a URL like example.com/hear/hocky&stocky it becomes translated by your rule to:
Can you see now what is going on? The & sign is the delimiter of GET variables so in effect you receive these 3 GET variables in PHP:
- hear (empty value)
- stocky (empty value)
The solution is to instruct mod_rewrite to encode your variable before it gets to PHP. This can be achieved by using the B flag that is available since Apache 2.2:
RewriteRule hear/(.+)$ index.php?hear&music=$1 [L,B]
You may notice that your URL's with special characters work without encoding. Technically such URL's are incorrect but most browsers will do the encoding for you, hence they will still work but for maximum compatibility it is good practice to always use urlencode when creating links like shown in earlier posts in this thread.