Функция вдруг вернуть полный путь с именем dir впереди? - PullRequest
0 голосов
/ 12 декабря 2011

У меня странная проблема.Я делаю своего рода фреймворк, такой как codeigniter, и я сделал функцию, равную "base_url ()" CI, которая в моем случае возвращает строку вроде: "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" />

Myпроблема в том, что возвращаемая из функции «строка» верна, когда я смотрю на исходный код в Chrome и Firefox, но когда я наводю на него курсор мыши, ссылка вместо этого ссылается на следующий URL:

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>?

Ответы [ 2 ]

2 голосов
/ 12 декабря 2011

EFBBBF - это метка порядка байтов UTF-8 .Один из них как-то проскользнул в вашу переменную.Отредактируйте файл конфигурации и удалите его.Если вы читаете переменную из файла и она вполне допустима, обрежьте ее в коде.

0 голосов
/ 12 декабря 2011

Я бы написал эту функцию так:

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

...