在PHP中,小写当使用URL编码进行urlencode(),输出的字符是大写:进行urlencode在PHP
echo urlencode('MyString'.chr(31));
//returns 'MyString%1F'
我需要让PHP给我回来“的MyString%1F”为上面的例子,但不小写字符串的任何其他部分。以便与其他平台保持一致。有没有什么办法可以做到这一点,而不必一次穿过字符串一个字符,找出是否需要每次更换套管?
在PHP中,小写当使用URL编码进行urlencode(),输出的字符是大写:进行urlencode在PHP
echo urlencode('MyString'.chr(31));
//returns 'MyString%1F'
我需要让PHP给我回来“的MyString%1F”为上面的例子,但不小写字符串的任何其他部分。以便与其他平台保持一致。有没有什么办法可以做到这一点,而不必一次穿过字符串一个字符,找出是否需要每次更换套管?
你为什么要这么做? F
或f
,它不应该有任何区别为percent encoding is ment to be case-insensitive。我能想到的唯一情况是创建散列时,但是我个人会将整个字符串转换为大写或小写,即将其视为不区分大小写。
不管怎么说,如果你真的需要做到这一点,那么就应该使用preg_replace_callback
相对容易:
$original = 'MyString%1F%E2%FOO%22';
$modified = preg_replace_callback('/%[0-9A-F]{2}/', function(array $matches)
{
return strtolower($matches[0]);
},
$original);
var_dump($modified);
这应该给你:
string(18) "MyString%1f%e2%FOO%22"
我在复制一个接口,它的确切响应。我已经克服了一些其他的差异,但这让我很难过。我试图尽可能地使用内置的函数,以尽量减少开销并保持性能。 – devgorilla
该模式并不完全正确 - 它匹配的是'
不知道我在想什么@Synchro,当然这种模式是错误的,我会更新我的答案。 – ndm
貌似输出仍然'的MyString% 1F' – JunM