使字符串“URL安全”

13 浏览
0 Comments

使字符串“URL安全”

有没有一种方法可以使字符串“URL安全”,即将空格替换为连字符,删除任何标点符号,并将所有大写字母改为小写?

例如:

"This is a STRING" -› "this-is-a-string"

或者

"Hello World!" –› "hello-world"

0
0 Comments

在这段代码中,函数sanitize被用来生成清洁的URL。它的工作原理是通过移除字符串中的特殊字符和标签,将字符串转换为URL安全的格式。然后,根据需要,将字符串转换为小写,并将空格替换为连字符。最后,如果需要,将字符串中的非字母数字字符移除。

然而,这段代码存在一些问题。首先,它移除了一些特殊字符,但没有考虑到URL中可能需要保留的一些字符,如斜杠和问号。其次,它使用了strip_tags函数来去除HTML标签,但这可能导致一些意外的问题,比如去除了URL中的参数部分。

为了解决这些问题,我们可以对代码进行一些修改。首先,我们可以使用urlencode函数来对字符串进行URL编码,以保留URL中的特殊字符。其次,我们可以使用parse_url函数来解析URL,然后对其进行处理。最后,我们可以使用filter_var函数来过滤URL中的非法字符。

下面是一个修改后的函数sanitize的示例代码:

function sanitize($string, $force_lowercase = true, $anal = false) {
    $clean = urlencode($string);
    $clean = preg_replace('/\s+/', "-", $clean);
    $clean = ($anal) ? preg_replace("/[^a-zA-Z0-9]/", "", $clean) : $clean ;
    $url_parts = parse_url($clean);
    $url_parts['path'] = filter_var($url_parts['path'], FILTER_SANITIZE_URL);
    $clean = http_build_url($url_parts);
    return ($force_lowercase) ?
        (function_exists('mb_strtolower')) ?
            mb_strtolower($clean, 'UTF-8') :
            strtolower($clean) :
        $clean;
}

通过对代码进行修改,我们解决了原来代码中存在的问题,并使其更加适用于生成URL安全的字符串。现在,函数sanitize可以正确地处理URL中的特殊字符和参数,并生成符合要求的URL。

0
0 Comments

问题的出现原因是当字符串以特殊字符结尾时,最后一个连字符(hyphen)没有被去除。解决方法是使用preg_replace函数来替换字符串中的字符,将特殊字符转换为连字符,并在最后去除连字符。具体的代码如下所示:

$safe = preg_replace('/^-+|-+$/', '', strtolower(preg_replace('/[^a-zA-Z0-9]+/', '-', $string)));

这段代码使用了两个preg_replace函数,首先将字符串中的非字母和数字字符替换为连字符,然后将连字符转换为小写,并在字符串的开头和结尾去除连字符。这样就可以将字符串变为URL安全的格式。

以上就是解决问题的方法,通过使用preg_replace函数,可以轻松地将字符串变为URL安全的格式,并去除最后一个连字符。

0