2017-08-10 61 views
0

這是我的UserAgent:地帶用戶代理PHP

的Mozilla/5.0(的PlayStation 4 4.73)爲AppleWebKit/536.26(KHTML,例如 壁虎)

我想上述轉換爲該:

的PlayStation 4 4.73

我已經嘗試了一些東西,如用substr剝離useragent,但那並沒有解決 - 嗯,但它確實很慢,看起來並不專業。

什麼是PHP中最好,最小和最快的方式來實現這個結果?

+0

您使用了哪些代碼? – Andreas

+0

您需要首先定義所需字符串的規則。它是否找到了第一個括號?你想從這個UA字符串中得到什麼:'Mozilla/5.0(Macintosh; Intel Mac OS X 10_9_5)AppleWebKit/537.36(KHTML,像Gecko)Chrome/59.0.3071.115 Safari/537.36'? –

+0

括號中的區域被稱爲評論。考慮到用戶代理的格式,你可以做'preg_split('/ [()] /',$ userAgent)[1]'。但用戶代理中的註釋沒有定義的結構。 – cmbuckley

回答

0

如果你只是想「無論是在第一對()括號」 ......

$str = 'Mozilla/5.0 (PlayStation 4 4.73) AppleWebKit/536.26 (KHTML, like Gecko)'; 
$str = substr($str,strpos($str,'(')+1); // remove the first (and everything before it 
$str = substr($str,0,strpos($str,')')); // remove the first) and everything after it 
echo $str; 

如果你想更復雜的分析...(如果沒有括號,或者只有一個如果你想抓住的字符串有(或)?如果你想要第一個括號中的內容,而不是第一個?),那麼你將不得不做一些事情,呃編程...

+1

你知道你可以使子串行進入一行代碼? – Andreas

+0

我可能會使用cmbuckley的解決方案,因爲該解決方案使用起來有點短。 – Mitch

+0

@Mitch它可能更短,但也更重要的運行。萬一你永遠不需要再看這個代碼,永遠不需要改變它。這是Brett在他的回答中應該有的一個班輪。它像泥巴一樣清晰。但它的工作。 '$ str = substr($ str,strpos($ str,'(')+ 1,strpos($ str,')') - strpos($ str,'(') - 1);'東西之前和之後在一行。https://3v4l.org/DmNUI – Andreas

0

這裏有幾種方法:

// smallest: 
$comment = preg_split('/[()]/', $userAgent)[1]; 

// fastest: 
$start = strpos($userAgent, '(') + 1; 
$comment = substr($userAgent, $start, strpos($userAgent, ')') - $start));