chr zwraca kod ASCII (czyli 8-bitowy) natomiast na stronie możesz mieć ustawione różne kodowanie znaków, np. UTF-8 dla utf-8 znaki ASCII, które mają numery od 0 do 127 są obsługiwane poprawnie (bo mieszczą się w standardzie kodowania UTF-8), pozostałe już nie i wymagają zamiany z danej strony kodowej ASCII na UTF-8. Polskie znaki diakrytyczne wymagają np. dwóch bajtów w kodzie UTF-8 i stąd te znaczki zamiast literek dla numerów powyżej 127 bo nie ma w UTF-8 znaku zapisywanego binarnie np. 10000000 (128). Musisz znaleźć sposób żeby konwertować z ASCII (z uwzględnieniem odpowiedniej strony kodowej) do UTF-8.