2011-06-23 37 views
0

當我從PHP v5.2.17 - > v5.3.5升級時出現以下代碼,我無法弄清楚它是什麼。有沒有人有什麼可能是錯的線索?謝謝。使用更高版本的PHP時代碼中斷

<?php 

setlocale(LC_ALL, 'en_US.UTF8'); 

$goto = $_POST['location']; 

function toAscii($str, $replace=array(), $delimiter='-') { 
    if(!empty($replace)) { 
     $str = str_replace((array)$replace, ' ', $str); 
    } 
    $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str); 
    $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean); 
    $clean = strtolower(trim($clean, '-')); 
    $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean); 
    return $clean; 
} 
?> 

有沒有任何形式的錯誤,我看了看我的CMS日誌,沒有什麼異常。我沒有設定一個簡單的測試,這裏是發生了什麼:

<?php 
$goto = $_POST['location']; 
function toAscii($str, $replace=array(), $delimiter='-') { 
    if(!empty($replace)) { 
    $str = str_replace((array) $replace, ' ', $str); 
    } 
    $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str); 
    $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean); 
    $clean = strtolower(trim($clean, '-')); 
    $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean); 
    return $clean; 
} 
?> 

輸出爲:<?echo toAscii($goto);?> 輸出是:<?echo $goto;?>

當我輸出它的偉大工程的原始形式的數據,當我輸出的toAscii($goto)數據它什麼也不返回

+4

什麼錯誤消息你得到了嗎? – Swift

+1

你是否收到有用的錯誤信息?堆棧跟蹤? – NullRef

+2

另外,有趣的是,我在我自己的PHP 5.3應用程序中使用了這個確切的代碼。它工作正常。也許你沒有安裝iconv擴展名? – Swift

回答

2

您尚未向您的問題添加錯誤消息,但由於代碼僅使用一個非標準功能,即iconv,因此很可能您尚未安裝/啓用iconv extension

要解決此問題,請啓用所需的擴展,並按照您從其他PHP配置瞭解的方式運行代碼。

如果擴展程序可用並且啓用(應該是PHP 5.3的情況),那麼您應該向您的問題添加更多信息,以確定哪些內容實際上已經中斷。什麼不按預期工作?


要解決問題,上面的代碼的地方:

error_reporting(-1); 
ini_set('display_errors', 1); 

這會照顧的錯誤和警告是直接可見的。


爲了繼續排除故障,讓我們留心那些不正常工作的例程。典型的我添加爲iconv返回值的檢查,同樣可以在任何類型的變量可以應用(測試如果一個變量包含的內容應預期)或函數的返回值:

function toAscii($str, $replace=array(), $delimiter='-') { 
    if(!empty($replace)) { 
    # NOTE: no need to cast to array. It's either array or string, both work 
    $str = str_replace($replace, ' ', $str); 
    } 
    # NOTE: inconv will return FALSE on error. Checking this now. 
    $result = iconv('UTF-8', 'ASCII//TRANSLIT', $str); 
    if (FALSE === $result) { 
    throw new Exception(sprintf('Iconv failed on "%s".', $str)); 
    } else { 
    $clean = $result; 
    } 

    $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean); 
    $clean = strtolower(trim($clean, '-')); 
    $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean); 
    return $clean; 
} 
+0

不幸的是,我有非常輕量級的PHP技巧,我不知道如何安裝iconv擴展程序來嘗試您的建議。我使用的是MAMP服務器(基本上是Mac上的LAMP)。我將如何去添加這個擴展? – Peeter

+0

首先檢查它是否已經可用:用代碼'<?php phpinfo()創建一個.php文件; '在那裏。使用您的瀏覽器請求該文件,它將列出所有已安裝和啓用的擴展。檢查iconv是否是列表的一部分。 – hakre

+0

你會得到什麼樣的錯誤?只是一個白頁,完全沒有錯誤? – hakre

相關問題