2014-10-29 1 views
1

У меня есть вход, как это:Что это за кодировка и как я могу кодировать строку в PHP?

$input = 'GFL/R&D/50/67289'; 

Я пытаюсь получить на это:

GFL$2fR$26D$2f50$2f67289 

До сих пор ближе я пришел это:

echo filter_var($input, FILTER_SANITIZE_ENCODED, FILTER_FLAG_ENCODE_LOW) 

который производит:

GFL%2FR%26D%2F50%2F67289 

Как я могу получить от данного ввода желаемый результат и какой вид кодировки является результатом?

Кстати, обратите внимание на чувствительность к корпусу. $2f требуется, а не $2F.

+0

понятия не имею, но в худшем случае вы можете попробовать простой 'str_replace («%»,«$», $ строка)' –

+0

@MarcB он не будет работать из-за вопроса случай чувствительности - фильтр var верхний регистр, поэтому я не уверен, что я могут надежно находить части результата, которые являются закодированными значениями, чтобы вводить только эти части. – bcmcfc

ответ

2

Это будет делать трюк: URL-кодирование, затем строчные кодированные последовательности и замены % для $ с препрега обратного вызова (в PHP PCRE не поддерживает случай смены модификаторов):

$input = 'GFL/R&D/50/67289'; 
echo preg_replace_callback('/(%)([0-9A-F]{2})/', function ($m) { 
    return '$' . strtolower($m[2]); 
}, urlencode($input)); 

выход:

GFL$2fR$26D$2f50$2f67289 
+0

Это работает блестяще, спасибо. – bcmcfc

+0

Хотя мне все еще интересно, была ли это конкретная кодировка, которая использовалась, или просто унаследованная версия urlencode. – bcmcfc

Смежные вопросы