2014-05-05 80 views
3

來自Google+ API的結果在每個「內容」結果末尾附加了\ufeff(我不知道爲什麼?)從Google+對象結尾刪除對象 - >內容中的「 ufeff」json結果

從json結果中刪除這個unicode字符的最好方法是什麼?它在我顯示的一些輸出中生成一個'?'

實施例:

https://developers.google.com/+/api/latest/activities/get#try-it 

進入活動ID

z12pvrsoaxqlw5imi22sdd35jwvkglj5204 

並單擊執行,結果將是: '?'

{ 
..... 
"object": { 
    ...... 
    "content": "CONTENT OF GOOGLE PLUS POST HERE \ufeff", 
    ...... 

例如PHP代碼其示出了其中'\ ufeff'是:

<?php 
$data = json_decode($result_from_google_plus_api, true); 
echo $data['object']['content']; 
// outputs "CONTENT OF GOOGLE PLUS POST HERE ?" 
echo trim($data['object']['content']); 
// outputs "CONTENT OF GOOGLE PLUS POST HERE ?" 

或者我是否會以這種錯誤的方式?我應該修復'?'問題而不是試圖刪除'\ufeff'

+1

在字符串的末尾看到BOM是很不尋常的... –

+0

通常,您可以使用[此答案]篩選所有無效的utf-8字符(http://stackoverflow.com/a/11709412/1338292)。 –

+0

@Jack除了'\ ufeff'是有效的UTF-8,並且不會被你發佈的答案 – mark

回答

5

在你的情況,你可以使用這個正則表達式:

$str = preg_replace('/\x{feff}$/u', '', $str); 

這樣,你可以在代碼點值完全一致,並把它刪除。

根據我的經驗,你想刪除更多的白色空間字符。從經歷了這很適合

# I like to call this unicodeTrim() 
$str = preg_replace(
    '/ 
    ^
    [\pZ\p{Cc}\x{feff}]+ 
    | 
    [\pZ\p{Cc}\x{feff}]+$ 
    /ux', 
    '', 
    $str 
); 

我發現http://www.regular-expressions.info/unicode.html有關細節一個不錯的資源:

  • \pZ - 匹配任何空白或不可見的分離
  • \p{Cc} - 匹配控制字符
  • \x{feff} - 匹配BOM

我見過的正則表達式建議搭配\pC而不是\pCc,然而,這是危險的,因爲pC包括到沒有字符被分配任何代碼點。我有實際的數據(某些表情符號或其他東西)因此被刪除。

但是,YMMW,我不能'強調這一點。

+0

感謝mark!我回到這個項目幾個星期了,一旦我做了我將實現這個正則表達式,並讓你知道它是如何:)乾杯! – dtbaker