从php中的url获取参数会添加特殊字符


getting parameters from url in php adds special characters

我有一个javascript代码,它调用PHP api的一个函数来在数据库中插入一行。

var url = 'http://myapi/OfertasVentaOnline/api.php?method=update&function=categoria&id='+id+'&idCategoria='+id_categoria+'&descripcion='+descripcion+'&format=json';

    $.getJSON(url, function (data){     
    });   

这个url的示例:

"http://myapi/OfertasVentaOnline/api.php?method=create&function=categoria&id=9999&idCategoria=3&descripcion=test%new%category&format=json"

在url中,我替换description参数中%的空格,如图所示,url是正确创建的。

然后我得到了我的api,他得到了调用并对其进行解码。在我用来解码和获取参数的函数中:

$descripcion_cool = str_replace("%"," ",$_GET['descripcion']);
echo utf8_decode($descripcion_cool);
$query = 'INSERT INTO `Categorias`(`idCamping`, `idCategoria`, `descripcion`) VALUES (
                    "'.mysql_real_escape_string($_GET['id']).'",
                    "'.mysql_real_escape_string($_GET['idCategoria']).'",
                    "'.mysql_real_escape_string($descripcion_cool).'")';

这个输出这个:

test new?tegoryINSERT INTO `Categorias`(`idCamping`, `idCategoria`, `descripcion`) VALUES (
                    "9999",
                    "3",
                    "test new�tegory")null

正如您所看到的,php为url参数添加了一些特殊字符。我在干什么?感谢

PD:在我的php文件中,我试图添加:

header('Content-type: text/plain; charset=utf-8');

但它一直在做同样的事情。

提前感谢

假设您发送的参数值有空格,则通过用%替换空格对其进行编码。事实上,你不必这么做。如果要对传递的params/quesrystings进行编码,可以使用encodeURIComponent()方法。如果你想对url进行编码,那么使用encodeURI()

 description = encodeURIComponent(description);
var url = 'http://myapi/OfertasVentaOnline/api.php?method=update&function=categoria&id='+id+'&idCategoria='+id_categoria+'&descripcion='+descripcion+'&format=json';

    $.getJSON(url, function (data){     
    });   

这将安全地对url进行enocode。