1

I'm having a very strange problem.

I have a form with an input field for the user to copy-paste Vimeo's embed code. The form is then submitted via ajax.

The problem is that when I write something else than the embed code in the input form, it works fine. When I paste the input code, it returns a "Page Not Found" error. I've narrow it down to two characters. When I type "><" I get the error. If I type "<>", the script passes.

The HTML form is ok so I'll just post my javascript code. (I use jQuery)

          //submit the video form
          function submitVideoForm() {
            var $inputs = $j('#form-add-video :input');
            var values = {};
            //loop through all the inputs and add them in an object
            $j($inputs).each(function() {
                values[this.name] = $j(this).val();
            });

            $j.post("http://www.mysite.com/admin/plugin/media/add_video/", values,
               function(data){
                    if (data != 'false') {
                        console.log('Worked');
                    }
                    else { 
                        console.log('Failed');
                    };
             }, 'json');

          }

When I look at what's posted with firebug, I can see that the data is escaped

media%5Barticleid%5D=355&media%5Bembed_code%5D=%3Ciframe+src%3D%22http%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F21350265%3Ftitle%3D0%26amp%3Bbyline%3D0%26amp%3Bportrait%3D0%22+width%3D%22398%22+height%3D%22224%22+frameborder%3D%220%22%3E%3C%2Fiframe%3E

I've tried using escape(), same problem.

Any help would be appreciated.

VVV
  • 7,563
  • 3
  • 34
  • 55
  • Where are you getting this 'Page Not Found' error? When you try to submit the form? Can you provide us with the URL that it cannot find (removing your personal site) – Luke Shaheen Feb 28 '12 at 20:43
  • Here's a screenshot of the error: http://i.imgur.com/1Aw3C.jpg. Here's the screenshot of the same script but different value in the input: http://i.imgur.com/NEAwY.jpg. Just so you know, I did try with the solutions below (encodeURIComponent, escape, etc). The string is encoded but I still get the error. – VVV Feb 28 '12 at 21:13
  • Is it possible the server sees it as a security threat and is blocking it when it sees %3E%3C (just a thought) – ajon Sep 10 '12 at 19:46
  • Thanks for the effort but I'm past this problem. I never found the solution, just updated the way the user added a video. – VVV Sep 10 '12 at 19:48
  • Already tried **encodeURIComponent/decodeURIComponent** function? – Ricardo Bin Feb 28 '12 at 19:31

2 Answers2

0

HTML tags can mess with your code. Replace it with its HTML entity equivalent. Snippet

Madara's Ghost
  • 172,118
  • 50
  • 264
  • 308
0

Try serializing your data, since you are using jQuery.

Replace $inputs and values with var values = $j('#form-add-video').serialize(); and remove the function looping through the inputs. .serialize will grab all of them for you.

OR, you could try encodeURIComponent

Ex: values[this.name] = encodeURIComponent($j(this).val());

See this thread for further discussion on escape vs encodeURI() vs encodeURIComponent.

Community
  • 1
  • 1
Luke Shaheen
  • 4,262
  • 12
  • 52
  • 82
  • Hi John, I tried it and it didn't help. It encoded the string properly but still got the "page not found" error. – VVV Feb 28 '12 at 19:38
  • Edited my answer to try .serialize() – Luke Shaheen Feb 28 '12 at 19:43
  • Unfortunately I can't use serialize because it's not really a form. The reason is that it's a plugin for a CMS and it's already wrapped inside a
    . I just need to post a small part of it.
    – VVV Feb 28 '12 at 20:38