Documentation says "With three arguments, strtr() will replace bytes; with two, it may replace longer substrings."
E.G. 1:
$ php -r "echo strtr('Äbc Äbc', 'Ä', 'a');"
a�bc a�bc
E.G. 2:
$ php -r "echo strtr('Äbc Äbc', array('Ä' => 'a'));"
abc abc
The behaviour is quite different. I believe the issue is generated only for each match. Which means if the matching character itself is not UTF-8 there should not be any issue. In this case, matching "\t\r\n" I guess it won't generate any issue, or at least it doesn't in my local environment. Considering this behaviour is probably a bit obscure I wouldn't be surprised there is a PHP implementation that could be a bit buggy or that works in a different way.
Anyway, as I later figured out, in one of the comments I mentioned the issue is the string containing the UTF-8 characters in a literal form from scratch. Not sure if that is generated by a PHP configuration or maybe a web server issue.