這是我第一次嘗試創建frontController,並且我遇到了一些小問題。__autoload:Escape ClassName
首先讓我給你的印象我的網站看起來像: 當我在瀏覽器中打開http://mysite.com/test
,服務器將調用帶有GET參數$控制器(測試)的index.php文件。這是通過.htaccess完成的。 在index.php中應該創建一個類$控制器的實例。 爲此,我使用PHP的__autoload函數。 因此,代碼如下所示:
$controller = $_GET["controller"];
function __autoload($controller)
{
include("controllers/$controller.php");
if(!class_exists($controller, false))
{
eval
('
class '. $controller . '
{
public function __construct()
{
include("404.html");
exit();
}
}
');
}
}
$application = new $controller;
當你看着我提供你可能已經注意到在它的的eval()啄的代碼。 我使用它來避免$ controller類不存在時的致命錯誤,並顯示一個404而不是它。
這裏開始的樂趣:,當有人進入像
的URL
會有
Parse error: syntax error, unexpected '!'
而且......
Fatal error: Class 'ImATroll!:D' not found
所以問題是:如何c我抓住了這個?我怎樣才能轉義$控制器變量的方式,它只包含允許類名稱的字符?
谷歌的'網址驗證'的第一個結果告訴你如何做到這一點 –
http://validator.w3.org/checklink 這將如何幫助我?雖然點在URL中有效,但它不在類名中。 – iceteea
好吧,這是我得到的第一個結果: http://phpcentral.com/208-url-validation-in-php.html –