使用 strtr() 函数并传入关联数组作为第二个参数,即可按映射表批量替换字符串中的字符。该函数会遍历输入字符串,将键名对应的子串替换为值,支持单字符和多字符的精确匹配。

strtr() 处理多字符键时的匹配优先级是怎样的
当映射表的键包含长度大于1的子串时,strtr() 采用最长前缀匹配原则。它会优先替换较长的键,确保如 "<script>"</script> 不会被拆分为 、script 和 > 分别处理,从而保持语义完整性。

$map = [
'<script>' => 'SCRIPT_BLOCKED',
'<' => '<',
];
$input = '<script>alert(1)</script>';
echo strtr($input, $map); // 输出: SCRIPT_BLOCKEDalert(1)SCRIPT_BLOCKED
使用两个字符串参数与使用数组参数的行为差异是什么
当 strtr() 接收两个等长字符串作为第二和第三个参数时,它执行的是单字符到单字符的映射。此时,任何长度超过1的键都无效,且函数仅根据字符位置进行一对一替换,这与数组模式下的子串替换有本质区别。

$from = 'aeiou';
$to = '12345';
echo strtr('hello world', $from, $to); // 输出: h2ll4 w4rld
如果映射表中存在重叠的键会发生什么
在数组模式下,strtr() 从左到右扫描输入字符串。一旦某个位置的子串被映射表中的键匹配并替换,该部分即被视为已处理,不会再次参与后续匹配。这意味着即使替换后的结果包含其他键,也不会触发二次替换,保证了操作的原子性。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











