2016-02-15 83 views
1

我建有藏匿了谷歌搜索的API密鑰的唯一目的的PHP文件,但()的的file_get_contents的一部分總是呼應angular.callbacks._0_({代替angular.callbacks._0({file_get_contents()函數返回的angular.callbacks額外下劃線

這個小改變使得其餘的迴應毫無價值,因爲角落投擲Uncaught TypeError: angular.callbacks._0_ is not a function。雖然變通辦法完美的作品,我想知道,如果有人發現了這個問題的根源或更好的解決方案是嚴格PHP(捲曲或任何其他包)。

的search.php

<?php // Created by Deovandski on 2/14/2016 
header('Content-type: application/json'); 

# Setup Base URL and array for Parameters 
$host = 'https://www.googleapis.com/customsearch/v1?'; 
$queries = array(); 
$queries['cx'] = "XXX";// CSE KEY 
$queries['key'] = "XXX"; // API KEY 

# Setup possible incoming params 
if (isset($_GET['search_term'])) $queries['q'] = $_GET['search_term']; 
if (isset($_GET['result_count'])) $queries['result_count'] = $_GET['result_count']; 
if (isset($_GET['callback'])) $queries['callback'] = $_GET['callback']; 

# Build query and Final URL 
$queriesURL = http_build_query($queries) . "\n"; 
$finalURL = $host.$queriesURL; 
echo $finalURL; 
/* echo $finalURL output (I only edited the keys out): 
https://www.googleapis.com/customsearch/v1?cx=XXX&key=XXX&q=Hatsune+Miku&result_count=10&callback=angular.callbacks._0 
*/ 
// Setup Response 
$response = file_get_contents($finalURL); 

// workaround 
$fixedResponse = str_replace("angular.callbacks._0_", "angular.callbacks._0", $response); 
echo $fixedResponse; 

?> 

這是一個正確的谷歌API響應的一部分:

// API callback 
angular.callbacks._0({ 
"kind": "customsearch#search", 
"url": { 
    "type": "application/json", 
    "template": "https://www.googleapis.com/customsearch/v1?q={searchTerms}&num={count?}&start={startIndex?}&lr={language?}&safe={safe?}&cx={cx?}&cref={cref?}&sort={sort?}&filter={filter?}&gl={gl?}&cr={cr?}&googlehost={googleHost?}&c2coff={disableCnTwTranslation?}&hq={hq?}&hl={hl?}&siteSearch={siteSearch?}&siteSearchFilter={siteSearchFilter?}&exactTerms={exactTerms?}&excludeTerms={excludeTerms?}&linkSite={linkSite?}&orTerms={orTerms?}&relatedSite={relatedSite?}&dateRestrict={dateRestrict?}&lowRange={lowRange?}&highRange={highRange?}&searchType={searchType}&fileType={fileType?}&rights={rights?}&imgSize={imgSize?}&imgType={imgType?}&imgColorType={imgColorType?}&imgDominantColor={imgDominantColor?}&alt=json" 
}, 

我提出了這個問題,可以在我的FTP server可以看到真人版。 PHP文件可以通過這個link(包含它的AngularJS參數)來查看。

+0

顯示'echo $ finalURL'沒有api和css鍵的結果。 –

+0

echo $ finalURL輸出現在就在它下面。 – Deovandski

+0

使用指定的輸入參數進行測試 - 一切工作正常,不會添加額外的下劃線。所以這個問題在其他地方,而不是'file_get_contents' –

回答

1

問題是轉義序列\n。這是作爲請求的一部分傳遞的。並將其解釋爲空間並作爲回調函數名稱的一部分,並替換爲API的下邊以進行下劃線。

要理解只是嘗試這個選項,並查看結果:

$queriesURL = http_build_query($queries) . "\n" . "after"; 

所以才帶走一個換行符。