Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How are special characters handled in an oData query?

How is the & symbol handled in the following query in oData?

/vendordataservice.svc/vDataMapper_SourceMapVendor?&$filter=startswith(ParentName,'AT&T')&$top=7&$skip=0

I'm using EF3.5 and SQL2008. When I send that to my oData service I get no data back.

like image 845
makerofthings7 Avatar asked Nov 19 '10 20:11

makerofthings7


2 Answers

Do not use the “JavaScript String replace() Method”. It will replace the first occurrence of the special characters. If you have 2 occurence of the same special characters in the filtering parameter, it will fail. So use the regular expression to replace the characters.

function replaceSpecialCharacters(attribute) {
  // replace the single quotes
     attribute = attribute.replace(/'/g, "''");

     attribute = attribute.replace(/%/g, "%25");
     attribute = attribute.replace(/\+/g, "%2B");
     attribute = attribute.replace(/\//g, "%2F");
     attribute = attribute.replace(/\?/g, "%3F");

     attribute = attribute.replace(/#/g, "%23");
     attribute = attribute.replace(/&/g, "%26");
     return attribute;
}

Also pay attention, since the replacements also contains % then % it self should be replaced at beginning

like image 115
Reza Avatar answered Oct 13 '22 14:10

Reza


Here is a list of characters that should be encoded prior to sending to SQL server over HTTP:

http://msdn.microsoft.com/en-us/library/aa226544(SQL.80).aspx

Yes, the '&' symbol is one of them.

like image 42
makerofthings7 Avatar answered Oct 13 '22 14:10

makerofthings7