2012-06-17 2 views
0

Я использую ColdFusion для шифрования и расшифровки. У меня есть переменный активный со значением 1. Я хочу, чтобы создать URL, содержащий зашифрованное значение активных, как:Как расшифровать значение, содержащее специальные символы ColdFusion?

http://localhost:8500/blueline/[email protected]&active=!# 

Здесь !# является зашифрованным значением 1.

На другом конце, т.е. ActivateRegistration. cfm Мне нужно дешифровать active с таким же личным ключом и найти исходное значение. Но я не получаю правильную зашифрованную строку, когда я пытаюсь следующий код:

<cfset activeValue = url.active> 

Причина является зашифрованным значение также содержит специальный символ # внутри строки. Может ли кто-нибудь помочь? Также как я могу обрабатывать специальные символы/ключевые слова ColdFusion?

+1

Какой алгоритм и кодирование вы используете? Не зная больше, я предлагаю вернуть зашифрованное значение в base64. Кроме того, убедитесь, что [url encode] (http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7c2f.html) параметры URL. Если это не поможет, можете ли вы опубликовать пример, который воспроизводит проблему? – Leigh

ответ

5

Другие ребята рассказали о том, как избежать значащих символов, которые встречаются в пределах URL-адреса, но есть одна последняя часть головоломки, которая содержит разъяснения/исправления.

У вас нет проблем с зашифрованной строкой, потому что # является специальным символом для ColdFusion, потому что он имеет особое значение в самом URL-адресе. В URL-адресе символ # является разделителем между адресом документа на сервере и конкретным фрагментом, который предназначен в документе (т. Е. Тег закладки/привязки). Поскольку эта информация считается не относящейся к серверу, браузер никогда ее не отправляет, поэтому сервер никогда не получает ее.

Это похоже на то, что у вас есть значение параметра, которое само по себе имело встроенный амперсанд (&): насколько продвигаются URL-адреса, это разделитель между параметрами, а не часть значения параметра, поэтому CF не увидит это как часть значения переменной URL, она увидит ее как разделитель между двумя переменными.

Чтобы избежать всего этого путаницы, как и другие респонденты, вам необходимо всегда кодировать значения URL-адресов, которые должны содержать URL-адрес, содержащий символы meaningful to the URL-addressing schema itself.

+0

@sam это ответ! – baynezy

+0

Дух, я был настолько увлечен кодировкой url. Я не стал объяснять, почему. Хорошее объяснение. Это правильный ответ +1. – Leigh

0
<cfparam name="url.active" default=""> 
<cfoutput> 
    <a href="#cgi.script_name#?active=#urlEncodedFormat('!##')#">This String Contains CFML Values</a> 
    #urlDecode(url.active)# 
</cfoutput> 

Есть пара вещей, которые вам нужно сделать.

  1. Вы должны заменить любые # символы с ##, чтобы избежать их ColdFusion.
  2. Если вы переносите странные символы в URL-адрес, то его безопаснее переносить с помощью urlEncodedFormat() и декодировать их с помощью urlDecode() или base64 тоже должно быть хорошо.

Как упоминалось выше, я хотел бы посмотреть, как вы создаете этот зашифрованный текст, чтобы лучше помочь вам.

+0

Думаю, нам нужна дополнительная информация. Потому что им не нужно будет выходить из знака фунта в динамических результатах «шифрования». Только если они жестко закодированы на странице .cfm. Кроме того, переменные 'URL' автоматически декодируются. Таким образом, вы можете пропустить 'urlDecode'. – Leigh

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