我正在尝试转换特殊字符(例如+
, /
, &
, %
)我将使用它们来进行 GET 请求。我为此构建了一个函数。
function convert_text($text) {
$t = $text;
$specChars = array(
' ' => '%20', '!' => '%21', '"' => '%22',
'#' => '%23', '$' => '%24', '%' => '%25',
'&' => '%26', '\'' => '%27', '(' => '%28',
')' => '%29', '*' => '%2A', '+' => '%2B',
',' => '%2C', '-' => '%2D', '.' => '%2E',
'/' => '%2F', ':' => '%3A', ';' => '%3B',
'<' => '%3C', '=' => '%3D', '>' => '%3E',
'?' => '%3F', '@' => '%40', '[' => '%5B',
'\\' => '%5C', ']' => '%5D', '^' => '%5E',
'_' => '%5F', '`' => '%60', '{' => '%7B',
'|' => '%7C', '}' => '%7D', '~' => '%7E',
);
foreach ($specChars as $k => $v) {
$t = str_replace($k, $v, $t);
}
return $t;
}
当我使用some text
作为函数的输入,我应该得到some%20text
。但是,因为我在 foreach 循环中进行此替换,所以它首先将“空格”替换为%20
在第二步中它替换%
字符到%25
。最终我得到some%2520text
.
有没有其他方法或内置函数来进行这种替换?
rawurlencode 替换所有
EDIT
$t = str_replace(array_keys($specChars), array_values($specChars), $text);
我已经使用 str_replace 没有循环作为海绵巴勃罗 https://stackoverflow.com/users/1441828/spongepablo建议。
它给出了我不想要的相同结果。另一方面,如果我使用rawurlencode
,它会转换一些我不希望它们被转换的其他字符。