0

データベースと照合する前に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変数はすべて正しいデータを返すため、これは問題にはなりません。ローカルサーバーとライブサーバーでこれが異なるパフォーマンスを示す理由がわかりません。これを引き起こしている可能性のあるphpiniの設定はありますか?

私のローカルサーバーではyrj%C3%B6laitinenyrjölaitinenを生成しますが、私のライブサーバーではyrjölaitinenを生成します。

4

1 に答える 1

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);

これを見て時間を無駄にしてしまったことをお詫びします。それは私自身の愚かな過ちでした!

于 2012-09-20T10:56:24.393 に答える