【问题标题】:Function all of a sudden return a complete path with the dir name in front?函数一下子返回一个完整路径,前面有目录名?
【发布时间】:2012-01-18 12:52:41
【问题描述】:

我有一个奇怪的问题。我正在制作自己的框架,例如 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 中发现链接前面附加了一个名为 &lt;feff&gt; 的标签?

【问题讨论】:

  • 而你的base_url()函数的源代码是……具体在哪里?
  • 同意,我想看看 base_url 函数的代码。也可能是编码问题。
  • 对不起。速度有点快,因为我对这个问题真的很沮丧。

标签: php hyperlink base-url


【解决方案1】:

EFBBBF 是 UTF-8 byte order mark。一个不知何故溜进了你的配置变量。编辑配置文件并将其删除。如果您正在从文件中读取变量并且它存在于其中是合法的,请在代码中将其删除。

【讨论】:

  • @Thor A. Pedersen 尝试将文件保存为不带 BOM 的 UTF-8
  • 我刚刚结束了自己,并将字符集修复为 UTF-8,而 Notepad++(这是我的编辑器)中没有 BOM。这解决了问题......哦,天哪,一个乱七八糟的字符集能给网络程序员带来多大的好处:O
【解决方案2】:

我会把这个函数写成这样:

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,'&amp;');

【讨论】:

  • 为了记录,base_url()是一个原生的CodeIgniter的函数。不过同意你的建议
  • @DamienPirsy 我知道,但问题规定I am making kinda my own framework like codeigniter,而不是I am using codeigniter - 标记不正确。
  • 嗯,你说得对,我没看那句话,标签误导了我。感谢您清除此问题
  • 谢谢。我试过了,你的功能很好用。但是我的链接仍然在玩弄我,我不怀疑我或你的功能是问题所在。我认为这与字符集有关,因为脚本附加了 .
猜你喜欢
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 2015-12-26
相关资源
最近更新 更多