2010-10-18 175 views
4

我想用另一个替换字符串中的某个字符。他们很模糊拉丁字符。我想用4d9替换字符(十六进制)259,所以我试过这个:替换Unicode字符

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运行字符串,但这应该工作。

回答

0

一些可能的建议。首先,记住,你需要指定新值$字符串,即:

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

其次,确认您的字节流在$字符串发生。我提到这是因为你的十六进制字符串以低字节开头,所以你需要确保你的$字符串不是UTF8编码的。

4

U + 0259拉丁小写字母Schwa仅在UTF-16BE编码中被编码为字节序列0x02,0x59。您不太可能会使用UTF-16BE编码中的字节字符串,因为它不是ASCII兼容的编码,几乎没有人使用它。

您想要使用的编码(唯一支持拉丁语Schwa和西里尔语Schwa的ASCII超集编码,因为它支持所有Unicode字符)是UTF-8。确保您的输入采用UTF-8格式(如果它来自表单数据,将包含表单的页面作为UTF-8提供)为。然后,在UTF-8中,使用字节序列0xC9,0x99表示字符U + 0259。

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

如果你确保你的.php文件保存为UTF-8无BOM的文本编辑器,你可以跳过逃逸而直接说:

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