Пример #1
0
/**
 * Returns an url composed of params joined with /
 * A param can be a string or an array.
 * If param is an array, its members will be added at the end of the return url
 * as GET parameters "&key=value".
 *
 * @param string or array $param1, $param2 ... 
 * @return string
 */
function url_for($params = null)
{
    $paths = array();
    $params = func_get_args();
    $GET_params = array();
    foreach ($params as $param) {
        if (is_array($param)) {
            $GET_params = array_merge($GET_params, $param);
            continue;
        }
        if (filter_var_url($param)) {
            $paths[] = $param;
            continue;
        }
        $p = explode('/', $param);
        foreach ($p as $v) {
            if ($v != "") {
                $paths[] = str_replace('%23', '#', rawurlencode($v));
            }
        }
    }
    $path = rtrim(implode('/', $paths), '/');
    if (!filter_var_url($path)) {
        # it's a relative URL or an URL without a schema
        $base_uri = option('base_uri');
        $path = file_path($base_uri, $path);
    }
    if (!empty($GET_params)) {
        $is_first_qs_param = true;
        $path_as_no_question_mark = strpos($path, '?') === false;
        foreach ($GET_params as $k => $v) {
            $qs_separator = $is_first_qs_param && $path_as_no_question_mark ? '?' : '&';
            $path .= $qs_separator . rawurlencode($k) . '=' . rawurlencode($v);
            $is_first_qs_param = false;
        }
    }
    if (DIRECTORY_SEPARATOR != '/') {
        $path = str_replace(DIRECTORY_SEPARATOR, '/', $path);
    }
    return $path;
}
Пример #2
0
   function test_main_url_for()
   {
     assert_equal(url_for(''), '/');
     assert_equal(url_for('/'), '/');
     assert_equal(url_for('test'), '/test');
     assert_equal(url_for('mañana'), '/'.rawurlencode("mañana"));
     assert_equal(url_for('test', 1, 2), '/test/1/2');
     assert_equal(url_for('one', 'two', 'three'), '/one/two/three');
     assert_equal(url_for('one', 0, 'three'), '/one/0/three');
     assert_equal(url_for('one', '', 'three'), '/one/three');
     assert_equal(url_for('one', null, 'three'), '/one/three');
     assert_equal(url_for('my/hash#test'), '/my/hash#test');
     
     $site_url = 'http://www.limonade-php.net';
     assert_true((bool) filter_var_url($site_url));
     assert_true((bool) filter_var_url('http://example.com'));
     assert_true((bool) filter_var_url('http://example.com:2000/'));
     assert_true((bool) filter_var_url('https://www.example.com:2000'));
     assert_true((bool) filter_var_url('http://test.example.com/?var1=true&var2=34'));
     assert_false(filter_var_url('not an url'));
     
     assert_equal(url_for($site_url), $site_url);
     //var_dump(url_for($site_url, 'examples'));
     assert_equal(url_for($site_url, 'examples'), $site_url.'/examples');
     $ssite_url = 'https://www.limonade-php.net';
     assert_equal(url_for($ssite_url), $ssite_url);
     
     option('base_uri', '?');
     $url = url_for('test', array('p1' => 'lorem', 'p2' => 'ipsum'));
     assert_equal($url,'?/test&p1=lorem&p2=ipsum');
     $url = url_for('test', array(0 => 'lorem', 'p2' => 1));
     assert_equal($url,'?/test&0=lorem&p2=1');
     $url = url_for('test', array('p1' => 'mañana'));
     assert_equal($url,'?/test&p1='.rawurlencode("mañana"));

     option('base_uri', '/api');
     $url = url_for('test', array('p1' => 'lorem', 'p2' => 'ipsum'));
     assert_equal($url,'/api/test?p1=lorem&p2=ipsum');
	 }
Пример #3
0
/**
 * Returns an url composed of params joined with /
 * A param can be a string or an array.
 * If param is an array, its members will be added at the end of the return url
 * as GET parameters "&key=value".
 *
 * @param string or array $param1, $param2 ... 
 * @return string
 */
function url_for($params = null)
{
    $paths = array();
    $params = func_get_args();
    $GET_params = array();
    foreach ($params as $param) {
        if (is_array($param)) {
            $GET_params = array_merge($GET_params, $param);
            continue;
        }
        if (filter_var_url($param)) {
            $paths[] = $param;
            continue;
        }
        $p = explode('/', $param);
        foreach ($p as $v) {
            if (!empty($v)) {
                $paths[] = str_replace('%23', '#', rawurlencode($v));
            }
        }
    }
    $path = rtrim(implode('/', $paths), '/');
    if (!empty($GET_params)) {
        foreach ($GET_params as $k => $v) {
            $path .= '&' . rawurlencode($k) . '=' . rawurlencode($v);
        }
    }
    if (!filter_var_url($path)) {
        # it's a relative URL or an URL without a schema
        $base_uri = option('base_uri');
        $path = file_path($base_uri, $path);
    }
    if (DIRECTORY_SEPARATOR != '/') {
        $path = str_replace(DIRECTORY_SEPARATOR, '/', $path);
    }
    return $path;
}
Пример #4
0
function test_main_url_for()
{
    assert_equal(url_for(''), '/');
    assert_equal(url_for('/'), '/');
    assert_equal(url_for('test'), '/test');
    assert_equal(url_for('mañana'), '/' . rawurlencode("mañana"));
    assert_equal(url_for('test', 1, 2), '/test/1/2');
    assert_equal(url_for('one', 'two', 'three'), '/one/two/three');
    assert_equal(url_for('my/hash#test'), '/my/hash#test');
    $site_url = 'http://www.limonade-php.net';
    assert_true((bool) filter_var_url($site_url));
    assert_equal(url_for($site_url), $site_url);
    //var_dump(url_for($site_url, 'examples'));
    assert_equal(url_for($site_url, 'examples'), $site_url . '/examples');
    $ssite_url = 'https://www.limonade-php.net';
    assert_equal(url_for($ssite_url), $ssite_url);
    $url = url_for('test', array('p1' => 'lorem', 'p2' => 'ipsum'));
    assert_equal($url, '/test&p1=lorem&p2=ipsum');
    $url = url_for('test', array(0 => 'lorem', 'p2' => 1));
    assert_equal($url, '/test&0=lorem&p2=1');
    $url = url_for('test', array('p1' => 'mañana'));
    assert_equal($url, '/test&p1=' . rawurlencode("mañana"));
}