Заменить символ Юникода

Я пытаюсь заменить определенный символ в строке на другой. Это довольно неясные латинские символы. Я хочу заменить символ (шестнадцатеричный) 259 на 4d9, поэтому я попробовал это:

str_replace("\x02\x59","\x04\xd9",$string); 

Это не сработало. Как мне это сделать?

** РЕДАКТИРОВАТЬ: Дополнительная информация.

Спасибо bobince, что сделал трюк. Хотя, я хочу также заменить верхний регистр schwa, и он почему-то не работает. Я вычислил U + 018F (Ə) как UTF-8 0xC68F, и это должно быть заменено на U + 04D8 (0xD398):

 $string = str_replace("\xC9\x99", "\xD3\x99", $_POST['string_with_schwa']); //lc 259->4d9 $string = str_replace( "\xC6\8F", "\xD3\x98" , $string); //uc 18f->4d8 

Я копирую «Ə» в текстовое поле и размещаю его. Первая str_replace отлично работает в нижнем регистре, но не обнаруживает прописную str_replace во втором str_replace , странно. Он остается равным U + 018F. Угадайте, что я могу запустить строку через strtolower но это должно работать.

U + 0259 Latin Small Letter Schwa кодируется только как байтовая последовательность 0x02,0x59 в кодировке UTF-16BE. Очень маловероятно, что вы будете работать с байтовыми строками в кодировке UTF-16BE, поскольку это не кодировка, совместимая с ASCII, и почти никто ее не использует.

Кодировка, с которой вы хотите работать (единственная кодировка ASCII-superset для поддержки как латинской Schwa, так и кириллицы Schwa, так как она поддерживает все символы Unicode) является UTF-8 . Убедитесь, что ваш вход находится в формате UTF-8 (если он поступает из данных формы, обслуживать страницу, содержащую форму как UTF-8). Затем в UTF-8 символ U + 0259 представляется с использованием байтовой последовательности 0xC9,0x99.

 str_replace("\xC9\x99", "\xD3\x99", $string); 

Если вы сохраните файл .php как UTF-8-no-BOM в текстовом редакторе, вы можете пропустить экранирование и просто сказать:

 str_replace('ə', 'ә', $string); 

Несколько возможных предложений. Во-первых, помните, что вам нужно назначить новое значение $ string, то есть:

 $string = str_replace("\x02\x59","\x04\xd9",$string); 

Во-вторых, убедитесь, что поток байтов встречается в строке $. Я упоминаю об этом, потому что ваша шестнадцатеричная строка начинается с младшего байта, поэтому вам нужно убедиться, что ваша строка $ не кодируется UTF8.