Since you need to match some Unicode characters (€) it would be sensible to use a regular expression. The pattern \p{P} matches any known punctuation, and the assertion excludes your desired special characters from vanishing:
$text = preg_replace("/(?![.=$'€%-])\p{P}/u", "", $text);