You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优雅检查字符串含另一字符串字符及实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:23:50