2010-10-18 2 views
4

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

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

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

** EDIT: Дополнительная информация.

Спасибо, 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, странный. Он остается равным U + 018F. Думаю, я мог бы запустить строку через strtolower, но это должно сработать.

ответ

0

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

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

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

4

U + 0259 Латинская малая буква 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-не-BOM в текстовом редакторе, вы можете пропустить вытекание и просто прямо сказать:

str_replace('ə', 'ә', $string); 
Смежные вопросы