2016-06-23 64 views
0

我有一些字符串包含字符,如\x{1f601}我想用一些文本替換。str_replace爲UTF-16字符

當我做到這一點使用了preg_replace,它會是這樣的:

preg_replace('/\x{1f601}/u', '######', $str) 

然而,這似乎並沒有與str_replace函數的工作:

str_replace("\x{1f601}", '######', $str) 

我怎麼能做出這樣的替換工作與str_replace?

+0

您的文本字面上包含9個字符的長字符串「\ x {1f601}」,或者它包含字符「」?那麼UTF-16如何發揮呢? – deceze

+0

你是說'preg_replace'工作,但'str_replace'不?另外* UTF-16 *是一種編碼Unicode字符的方式。你有PHP運行在UTF-8模式? – roeland

回答

2

preg_replace是一個正則表達式解析器/替代品,這是一個Perl的正則表達式引擎,但str_replace並用明文方法取代事情

,你得在這裏可以看到regex101,陳述的preg_replace即:

的字符與字符位置0x1f601(128513十進制或373001八進制)匹配設定

但是,這可以轉移到非正則表達式查找和替換,通過直接複製和粘貼該面部笑臉符號到str_replace。

$str = str_replace("", '######', $str) 

或者,通過閱讀deceze's comment它給你一個乾淨的小解決方案。

附加:

正在使用的字符集是非標準的,因此它可能是有用的,是您探索Mb_Str_replace(GitHub上),這是一個accompanyment(但不直接從)mb_string集合PHP函數。

最後:

爲什麼你需要做字符串替換磨片,你已經在做正則表達式的preg_replace?也請閱讀說明書,清楚地說明所有這些。

+2

你*可以*寫''\ xF0 \ x9F \ x98 \ x81「'作爲字符串文字等價物,而不需要複製和粘貼並擔心您的源代碼編碼... – deceze

+0

@deceze我更新了我的答案:) – Martin

+0

請注意,以上是* UTF-8編碼*字符的字符串文字。如果字符串OP正在處理實際上不是UTF-8編碼,那麼他們需要將其適應於他們需要的任何編碼。 – deceze