I'd go with replacing the special characters with the normal characters. Perhaps using a map table would be the easiest way to accomplish this. I've done so for a romanian website, where I've replaced the diacritics with the associated alphabet letters.
I have optimistic thoughts, even though sometimes (if not always) life's a bitch.
This is the code I would use to do it. However, although you can calculate the identifier on-the-fly, if you introduce any more characters into it then consider storing it in the database so you can be certain it can be reversed.
I know I can do string to lowercase and ' ', '-' replace, but what else can I add for weird symbols like é etc... Whats the easiest way to go round this?
The easiest way (that I can think of right now) to deal with accented characters would be to build some sort of translation table which specifies which ASCII character any given accented character should be converted to. For example, array('à' => 'a', 'é' => 'e' ... 'Ź' => 'Z'). There might be a lot of characters to consider but you'd only have to construct the translation table once.