在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