我有一个奇怪的问题。我正在制作像codeigniter一样的自己的框架,并且我已经创建了一个与CI的“base_url()”相同的函数,在我的例子中它返回一个字符串,如:“http://www.example.com/”。我的问题(我之前从未听过)就在于我使用base_url()函数建立到css文件和其他导航的链接。所以当我在一个视图中写道:
<link rel="stylesheet" type="text/css" href="<?= base_url(); ?>css/style.css" />
实际链接应为:
<link rel="stylesheet" type="text/css" href="http://www.example.com/css/style.css" />
我现在的问题是,当我查看Chrome和Firefox中的源代码时,从函数返回的“字符串”是正确的。但当我将鼠标悬停在它上面时,链接会链接到以下网址:
http://example.com/%EF%BB%BFhttp://www.example.com/css/style.css
有谁可以解释为什么会这样做?
编辑: 我很抱歉我忘记了base_url()的源代码:
function base_url($url_arguments = array()){
// Require config fil
include(dirname(__FILE__).'/../system/config.php');
// Generate link
$return_url = $config['base_url']; // http://www.example.com/
if(count($url_arguments) > 0){
$return_url .= "?";
foreach($url_arguments as $get => $value){
$return_url .= $get."=".$value.'&';
}
preg_match("/(.+?)&$/i", $return_url, $matches);
$return_url = $matches[1];
}
// Return link
return ($return_url);
}
额外:我的同事在VIM中发现在链接前面附加了一个名为<feff>
的标签?
答案 0 :(得分:2)
EFBBBF是UTF-8 byte order mark。一个人以某种方式进入了你的配置变量。编辑配置文件并将其删除。如果您正在从文件中读取变量并且它在那里是合法的,请在代码中修剪它。
答案 1 :(得分:0)
我会把这个函数写成:
function base_url ($url_arguments = array()) {
// Require config file
include(dirname(__FILE__).'/../system/config.php');
// Generate link
$return_url = $config['base_url'];
// Add query string, if any
if (count($url_arguments)) {
if (function_exists('http_build_query')) {
$return_url .= "?".http_build_query($url_arguments);
} else {
$qStr = array();
foreach($url_arguments as $key => $value) {
$qStr[] = url_encode($key)."=".urlencode($value);
}
$return_url .= "?".implode('&',$url_arguments);
}
}
// Return link
return $return_url;
}
注意失去无意义的正则表达式 - 我怀疑这是以某种方式导致你的问题。您可以简单地$return_url = rtrim($return_url,'&');
完成此操作。