需要用单个实例替换重复字符串

时间:2014-04-23 16:38:23

标签: php url url-rewriting

好的,我正在接受一个字符串,查询数据库,然后必须提供一个返回页面的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.

3 个答案:

答案 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:

http://fr2.php.net/manual/en/function.preg-replace.php