That's an em dash you're trying to replace. However, you're looking for a regular dash. Try running the string through this mess of code first and reading the blog article I got it from
EDIT
A complete working example, basically pasting the example code from the blog article and fixing a small mistake with your substr
function scrub_bogus_chars(&$text) {
// First, replace UTF-8 characters.
$text = str_replace(
array("\xe2\x80\x98", "\xe2\x80\x99", "\xe2\x80\x9c", "\xe2\x80\x9d", "\xe2\x80\x93", "\xe2\x80\x94", "\xe2\x80\xa6"),
array("'", "'", '"', '"', '-', '--', '...'),
$text);
// Next, replace their Windows-1252 equivalents.
$text = str_replace(
array(chr(145), chr(146), chr(147), chr(148), chr(150), chr(151), chr(133)),
array("'", "'", '"', '"', '-', '--', '...'),
$text);
}
// Original string (with em dash)
$text = "this comes before – this comes after";
// Ensure regular dashes will be available
scrub_bogus_chars($text);
// Lastly, extract the interesting part of the original string
$char = ' - ';
$strpos = strpos($text, $char);
$text = substr($text, $strpos + strlen($char));
echo $text . PHP_EOL;