iconv с багами, используйте mbstring.
А вместо перекодировщика Лебедева рекомендую https://2cyr.com/decode/
Ну и конечно же работать со строками как с байтами, еще стоит обратить внимание на настройки кодоровки веб сервера, чтобы он там не поломал ничего, если передаёте кюданные как строку. Как костыль можно упаковать, например в base64 а на сервере распаковать:) либо передавать как ascii js умеет такое.