urldecode()和rawurldecode()在本地工作,但不在实时服务器上工作

时间:2012-09-20 10:00:06

标签: php

我有以下代码行来检查和解码URL,然后再根据我的数据库进行检查:

$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

1 个答案:

答案 0 :(得分: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);

抱怨任何人浪费时间看这个。这是我自己的愚蠢错误!