好的,我正在接受一个字符串,查询数据库,然后必须提供一个返回页面的URL。输入中有多个特殊字符,我使用以下代码剥离所有特殊字符和空格,并替换为HTML“%25”,以便我的遗留系统正确搜索所需的值。然而,我需要做的是减少出现的“%25”的数量。
我当前的代码会替换
之类的内容“你好./威尔伯”,“你好%25%25%25%25%25%威尔伯”
但我希望它返回
“Hello%25there%25Wilbur”
仅用一个实例替换“%25”的倍数
$string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
return preg_replace('/[^A-Za-z0-9]/', '%25', $string); // Replaces special chars.
答案 0 :(得分:1)
选择非字母数字字符后,只需添加+
即可。
$string = "Hello. / there Wilbur";
$string = str_replace(' ', '-', $string);
// Just add a '+'. It will remove one or more consecutive instances of illegal
// characters with '%25'
return preg_replace('/[^A-Za-z0-9]+/', '%25', $string);
示例输入:Hello. / there Wilbur
示例输出:Hello%25there%25Wilbur
答案 1 :(得分:0)
这将有效:
while (strpos('%25%25', $str) !== false)
$str = str_replace('%25%25', '%25', $str);
答案 2 :(得分:0)
或使用正则表达式:
preg_replace('#((?:\%25){2,})#', '%25', $string_to_replace_in)
暂停不使用循环,因此连续越多'%25',preg_replace
越快while
。
Cf PHP doc: