如何在不更改url的情况下使字符串变为小写

问题描述

我正在使用mb_strtolower将字符串转换为小写字母,但有时文本包含的URL均使用大写字母。当我使用mb_strtolower时,URL当然会更改并且无法正常工作。 如何在不更改网址的情况下将字符串转换为小写?     

解决方法

        由于您尚未发布字符串,因此只能一般回答。 每当在字符串上使用函数使其变为小写时,整个字符串都将变为小写。字符串函数只知道字符串,它们不知道这些字符串中具体写入的内容。 在您的方案中,您不想将我假设的整个字符串都小写。您只想小写该字符串的一部分,其他部分(URL)则不应更改。 为此,您必须首先将字符串解析为这两个不同的部分,我们将其称为“ 0”和“ 1”。然后,您只需要在文本类型的部分上应用小写功能。之后,您需要将所有部分按其原始顺序重新组合在一起。 如果字符串的内容在语义上很简单,则可以在空格处分割字符串。然后,您可以检查每个部分,如果它以
http://
https://
is_url()
?)开头,否则,请执行小写操作:
$text = \'your content http://link.me/now! might differ\';
$fragments = explode(\' \',$text);
foreach($fragments as &$fragment) {
    if (is_not_url($fragment)) 
        $fragment = strtolower($fragment) // or mb_strtolower
        ;
}
unset($fragment); // remove reference
$lowercase = implode(\' \',$fragments);
要使此代码起作用,您需要定义
is_not_url()
函数。此外,原始文本必须包含允许基于空格分隔符对其进行基本解析的内容。 希望本示例可以帮助您更好地编码和理解问题。     ,        在这里,您可以进行迭代,但是要尽可能地好。
    function strtolower_sensitive ( $input ) {
            $regexp = \"#((http|https|ftp)://(\\S*?\\.\\S*?))(\\s|\\;|\\)|\\]|\\[|\\{|\\}|,|\\\"|\'|:|\\<|$|\\.\\s)#ie\";
            if(preg_match_all($regexp,$input,$matches,PREG_SET_ORDER)) {
                    for( $i=0,$hist=array(); $i<=count($matches); ++$i ) {
                            str_replace( $u=$matches[$i][0],$n=\"sxxx\".$i+1,$input ); $hist[]=array($u,$n);
                    }
                    $input = strtolower($input);
                    foreach ( $hist as $h ) {
                            str_replace ( $h[1],$h[0],$input );
                    }
            }
            return $input;
    }
$ input是您的字符串,$ output是您的答案。 =)     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...