替换unicode字符

时间:2010-10-18 13:27:57

标签: php unicode replace

我正在尝试将字符串中的某个字符替换为另一个字符。他们是非常模糊的拉丁字符。我想用4d9替换字符(十六进制)259,所以我尝试了这个:

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中没有检测到大写,这很奇怪。它仍然是U + 018F。猜猜我可以通过strtolower运行字符串,但这应该可以。

2 个答案:

答案 0 :(得分:4)

U + 0259 Latin Small Letter Schwa仅编码为UTF-16BE编码中的字节序列0x02,0x59。您不太可能使用UTF-16BE编码中的字节字符串,因为它不是ASCII兼容的编码,几乎没有人使用它。

您要使用的编码(唯一支持Latin Schwa和Cyrillic Sc​​hwa的ASCII超集编码,因为它支持所有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);

答案 1 :(得分:0)

一些可能的建议。首先,请记住,您需要将新值分配给$ string,即:

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

其次,验证字节流是否出现在$ string中。我提到这一点是因为你的十六进制字符串以低字节开头,所以你需要确保你的$ string不是UTF8编码的。