2010-10-18 204 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);