The en-dash (which is what that character is), does indeed live at code point 150 in the Windows-1251 character set.
It does not appear in the ASCII character set, nor does it appear in ISO-8859-1 (aka Latin-1).
Its Unicode code point is 2013, which in a UTF-8 document is encoded as three bytes 128, 147, 226.
It would appear that your source code is being saved as UTF-8, given the bytes reported as being in the string literal "–". If the text file is saved using the same encoding, then str_replace("–", $whatever, $text) would do the job: the correct bytes are being searched for and replaced. If not, then either some character set conversion would be needed ([man]iconv[/man]) to convert the text file into the same encoding that the PHP source code with the string literals in it was saved as; or specify bytes explicitly as "\x80\x93\xe2" (A UTF-8 encoded en-dash) or "\x96" (an en-dash in Windows-1251).
(UTF-8 encoding by default for get_file_contents() )
Unless you're using PHP 6 already, file_get_contents() is binary-safe: the bytes it puts in the string are the same bytes that were in the original file (actually, binary-safe file reading is the default in PHP 6 as well).