Ampersand in GET, PHP

回眸只為那壹抹淺笑 提交于 2019-12-19 19:51:52

问题


I have a simple form that generates a new photo gallery, sending the title and a description to MySQL and redirecting the user to a page where they can upload photos.

Everything worked fine until the ampersand entered the equation. The information is sent from a jQuery modal dialog to a PHP page which then submits the entry to the database. After Ajax completes successfully, the user is sent to the upload page with a GET URL to tell the page what album it is uploading to --

$.ajax ({
    type: "POST",
    url: "../../includes/forms/add_gallery.php",
    data: $("#addGallery form").serialize(),
    success: function() {
        $("#addGallery").dialog('close');
        window.location.href = 'display_album.php?album=' + title;
    }
});

If the title has an ampersand, the Title field on the upload page does not display properly. Is there a way to escape ampersand for GET?

Thanks


回答1:


In general you'll want to URL-encode anything that isn't completely alphanumerical when you pass them as parts of your URLs.

In URL-encoding, & is replaced with %26 (because 0x26 = 38 = the ASCII code of &).

To do this in Javascript, you can use the function encodeURIComponent:

$.ajax ({
    type: "POST",
    url: "../../includes/forms/add_gallery.php",
    data: $("#addGallery form").serialize(),
    success: function() {
        $("#addGallery").dialog('close');
        window.location.href = 'display_album.php?album=' + encodeURIComponent(title);
    }
});

Note that escape has the disadvantage that + is not encoded, and will be decoded serverside as a space, and thus should be avoided (source).

If you wish to do this serverside at the PHP level, you'll need to use the function urlencode.




回答2:


window.location.href = 'display_album.php?album=' + encodeURIComponent(title);

The javascript escape function will not encode these characters: * @ - _ + . /. So if you have title like "this+that", the plus sign will be interpreted as a space and PHP will receive the variable as "this that".

Using the encodeURIComponent will also encode the following characters: , / ? : @ & = + $ #



来源:https://stackoverflow.com/questions/2748042/ampersand-in-get-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!