Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 200
  • Last Modified:

coldfusion variables

I have a URL query parameter string that is:
?fq=object_type:"Graphic+arts"&rows%3D10&q%3Dcatlin%26
I want it to be
?fq=object_type:"Graphic+arts"&rows=10&q=catlin
Is there a way to do this without replacing text.
I tried URLDecode but it didn't work.
Thanks.
0
cbeverly
Asked:
cbeverly
  • 5
  • 4
1 Solution
 
_agx_Commented:
What result did you get? Because it works fine for me
0
 
sumColdCommented:
Hey try using 'unescape()' javascript function.

You can also refer below link:

http://www.w3schools.com/jsref/jsref_unescape.asp
0
 
cbeverlyAuthor Commented:
My problem is I have a list below that I want to loop through using comma as a delimiter which works fine until it gets to "Catlin,George" and then it thinks there are 2 separate entities instead of one. I want the list to be  separated out into 1. object_type 2. topic 3. name 4. place 5. onPhyscialExhibit and 6.culture  I don't know what else to use for a delimiter.
 object_type:"Paintings",topic:"Frontier",name:"Catlin, George",place:"United States",onPhysicalExhibit:"Yes",culture:"Indians of North America"
0
How to Use the Help Bell

Need to boost the visibility of your question for solutions? Use the Experts Exchange Help Bell to confirm priority levels and contact subject-matter experts for question attention.  Check out this how-to article for more information.

 
_agx_Commented:
CF list functions accept other delimiters besides a comma. So if you're creating the original list, you could use any delimiter you want, like "|" or "~" or even non-printable characters.

YourString

object_type:"Paintings"|topic:"Frontier"|name:"Catlin, George"|place:"United States"|onPhysicalExhibit:"Yes"|culture:"Indians of North America"

Example
<cfset params = {}>
<cfloop list="#yourString#" index="elem" delimiters="|">
      <cfif listLen(elem, ":") eq 2>
            <cfset theName = listFirst(elem, ":")>
            <cfset theValue = replace(listLast(elem, ":"), '"', "", "all")>
            <cfset params[theName] = theValue>
      </cfif>
</cfloop>
<cfdump var="#params#">
0
 
_agx_Commented:
Even simpler, format the list values as a JSON string:

ie YourString:
{"place":"United States","name":"Catlin, George","culture":"Indians of North America","object_type":"Paintings","topic":"Frontier","onPhysicalExhibit":true}

Then you can deserialize it into a CF structure with just:

             <cfset paramsAsStruct = deserializeJSON(yourString)>
0
 
cbeverlyAuthor Commented:
When I try #SerializeJson(url.fq)#
I am getting this below not the string you have. "place:\"United States\",name:\"Catlin, George\",culture:\"Indians of North America\","object_type:\"Paintings\",topic:\"Frontier\""
0
 
_agx_Commented:
No assuming #url.fq# contains a json string, you want to DEserialize, not serialize. Deserializing will convert the json string back into a CF structure.

     <cfset paramsAsStruct = deserializeJSON( url.fq )>
0
 
cbeverlyAuthor Commented:
When I try deserializeJSON(url.fq) I get this error message:

JSON parsing failure at character 1:'p' in place:"United States",culture:"Indians of North America",object_type:"Paintings"
0
 
_agx_Commented:
It'll only work IF you changed the url string to pass a JSON string for the #url.fq# parameter. (It won't work with your original value because it's not a valid json string. )  If you are passing a json string, then make sure you urlencoded the value:

            ie   somePage.cfm?fq=#URLEncodedFormat(serializeJSON(someStruct))#"

If you can't change it to pass JSON, you'll have to use the 1st approach instead.
0
 
cbeverlyAuthor Commented:
Thank you for your help. I attacked the problem from a different approach so I am not going to use the code I posted.
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 5
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now