PHP使用%符号清理传入的字符串

时间:2012-02-11 10:00:22

标签: php string utf-8

我在php字符串中有一个查询,我试图过滤%符号。 整件事情是在utf-8。 如果字符串包含%(例如%acheron),它将转换为其等效实体(在我提到的情况下,它变为'not'符号字符,由字符串中的%ac序列解释)。 我似乎无法清理此角色的传入字符串/ 我不能用PHP替换来清理字符串,因为它在脚本中已被“解码”了。

我发现我能弄明白的唯一方法是使用rawurlencode然后清理它,但它似乎是一个糟糕的解决方案,并为我创造了其他角色的问题。

是否有一些更有效的方法来清除这些字符而不影响字符串的其余部分?例如,我正在寻找一个能剥离%&的函数来自字符串的#(和任何其他),否则保持原样。 (preg_replace不适合我)

换句话说,有没有办法接受字符串并清理它而不会转换任何可能的特殊字符,以便我可以从字符串中删除它们。

编辑:查询是通过GET进入的,目前尚不清楚。 EDIT2:使用urlecode或rawurl编码: %acheron转换为%ACheron(我猜可以清理)但是 ^ acheron被转换为%5Eacheron(因此几乎不可能通过模式清理它)......

请原谅我的问题的无效性 谢谢 拉里

2 个答案:

答案 0 :(得分:1)

  

$ string = preg_replace(“/(%|& |#)/”,'',$ string);

这样的东西?如果我理解你的问题,这应该有效。

编辑:好的,这就是你要找的东西:

<?php
function myUrlEncode($string) {
    $entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D', '%5E');
    $replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]", "^");
    return str_replace($entities, $replacements, urlencode($string));
}


$search = myUrlEncode($_GET['id']);
$search = preg_replace("/(%|&|#)/", '', $search);

echo $search;
?>

答案 1 :(得分:1)

听起来像str_replace就像你要找的那样。

例如:

$text = "%acheron";
$search = "%";
$replace = ""; //or whatever you want to replace it with
echo str_replace($search, $replace, $text);

您还可以为$search$replace

的数组创建一个数组