如何优雅检查字符串含另一字符串字符及实现URL特殊字符转十六进制?
嘿,这两个问题我刚好有简洁靠谱的解决方案,给你详细说说:
问题一:检查字符串是否包含另一字符串的任意字符
PHP里有个专门干这事的函数——strpbrk(),它会直接在目标字符串里查找指定字符集合中的任意一个字符,找到就返回从该字符开始的子串,没找到则返回false,用起来超简洁:
$targetStr = "I am Living here!"; $checkChars = "!xyz"; if (strpbrk($targetStr, $checkChars)) { echo "目标字符串包含指定集合中的字符"; } else { echo "目标字符串不包含指定集合中的字符"; }
如果你想用正则的方式,也可以用preg_match(),记得用preg_quote()转义特殊字符避免正则语法冲突:
if (preg_match('/[' . preg_quote($checkChars, '/') . ']/', $targetStr)) { // 存在匹配字符 }
不过strpbrk()在性能上更优,毕竟是专门为这个场景设计的内置函数。
问题二:URL特殊字符自动转十六进制编码
你现在手动替换%和空格的方式太麻烦了,还容易遗漏其他特殊字符(比如!、@这些)。PHP早就内置了成熟的URL编码函数,完全不用自己造轮子:
rawurlencode():符合RFC 3986标准,会把空格转成%20,其他特殊字符也会转成对应的十六进制编码(比如!转成%21),非常适合GET参数的编码需求。urlencode():会把空格转成+,虽然大部分服务器也能识别,但rawurlencode()更贴合标准URL规范。
直接用rawurlencode()处理你的参数就行,示例代码:
$address = "I am Living here!"; $encodedAddress = rawurlencode($address); // 拼接成完整URL $fullUrl = "www.mysite.com/page?address=" . $encodedAddress; // 最终结果是:www.mysite.com/page?address=I%20am%20Living%20here%21
这样所有需要编码的特殊字符都会被自动处理,包括你之前手动处理的空格和%(%会被转成%25),既简洁又不会出错。
内容的提问来源于stack exchange,提问作者Nark
相关产品推荐
相关产品推荐

