2012-09-20 43 views
0

在本地,但沒有工作,我有以下行代碼來檢索和檢查它反對我的數據庫之前解碼網址:urldecode()和rawurldecode()直播服務器

$urls = url_split(url_current());  

$url_page = (string)rawurldecode($url[0]); 

的URL被拆分,並把到使用以下功能的數組:

function url_current() 
{ 
    // Check for HTTPS 
    $http = 'http'; 

    if (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") $http .= 's'; 

    $http .= '://'; 

    // Return URL 
    return $http . $_SERVER['HTTP_HOST'] . $_SERVER["REQUEST_URI"]; 
} 

function url_split ($url) 
{  
    // Retrieve URLs - Remove URL and split into array 
    $url = explode('/', str_replace('http://www.siteurl.com', '', $url)); 

    // Build new array, remove blanks 
    $urls = array(); 

    for ($i = 0; $i < sizeof($url); $i++) 
    { 
     if ($url[$i] != '') $urls[] = $url[$i]; 
    } 

    // Return array 
    return $urls; 
} 

這是工作(使用Zend)我的本地服務器上,但它不工作我活的服務器上。這不應該是$ _SEVER變量的問題,因爲它們都返回正確的數據。我不知道爲什麼這將在我的本地服務器上執行不同於我的現場服務器。有沒有在php ini中設置可能會導致此問題?

在我的本地服務器YRJ%C3%B6laitinen產生yrjölaitinen但我活的服務器上它產生yrjölaitinen

+0

您是否嘗試調試過這些? – Jon

+0

我已更新我的帖子以顯示正在製作的內容的示例。 – chapmanio

+0

定義「在我生效的服務器上它產生」。正在發射的數據看起來是一樣的;解釋是不同的。所以我懷疑你的測試服務器宣傳Charset UTF8,而你的實時服務器宣傳ISO-8859-1或ISO-8859-15(又名Latin1)。用Firebug或其他HTTP通信檢查工具檢查服務器標題。 – LSerni

回答

0

好的問題解決了。恐怕這與我的PDO數據庫連接有關。我還沒有更新的代碼強制UTF-8:

// Connect to database 
$db = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=utf8", DB_USER, DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")); 

// Injection prevention 
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

道歉浪費任何人的時間看這個。這是我自己愚蠢的錯誤!

+0

你可能想接受你自己的答案,然後:) – eis

+0

它不會讓我兩天,詛咒你Stack Overflow! *握拳* – chapmanio