我正在尝试将字符串中的某个字符替换为另一个字符。他们是非常模糊的拉丁字符。我想用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
运行字符串,但这应该可以。
答案 0 :(得分:4)
U + 0259 Latin Small Letter Schwa仅编码为UTF-16BE编码中的字节序列0x02,0x59。您不太可能使用UTF-16BE编码中的字节字符串,因为它不是ASCII兼容的编码,几乎没有人使用它。
您要使用的编码(唯一支持Latin Schwa和Cyrillic Schwa的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编码的。