gpt4 book ai didi

php - 转义 urldecode 转义混淆

转载 作者:行者123 更新时间:2023-11-28 14:00:58 25 4
gpt4 key购买 nike

我有一个 TinyMCE 编辑器 - 其内容需要通过 AJAX 上传。

显然,由于 AJAX 发送参数,因此需要通过 JavaScript escape() 函数对它们进行转义,这样就不会破坏 AJAX 参数。这些字段是在 PHP 端进行 mysql_real_escape_string 编辑的,我只需要对 AJAX 参数进行转义。

不幸的是,当我将链接和图像添加到编辑器然后提交时,图像和链接的 URL 显示如下:

http://localhost:8888/%22../img/miscimages/hwo-american.gif/%22

在向用户展示内容的页面(商品查看页面),通过urldecode()运行数据库中的字符串,去掉所有的%22 和其他转义字符。此页面上没有 javascript,全部由 PHP 生成,因此使用 urldecode() 而不是 unescape()。有什么办法可以解决这个问题吗?

代码:

AJAX 发送

function update(){
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}else{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var response = xmlhttp.responseText;
alert(response);
window.location = 'admin-products.php';
}
}
var prodID=document.getElementById("editchoice").value;
var edittitle=escape(document.getElementById("editname").value);
var editcategory=document.getElementById("editcat").value;
var editcontent = escape(tinyMCE.get('editcontent').getContent());
var parameters= "prodID="+prodID+"&title="+edittitle+"&content="+editcontent+"&cat="+editcategory;
xmlhttp.open("POST", "../scr/editProduct.php", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(parameters);
}

PHP 数据库插入

$prodID = $_POST['prodID'];
$title = urldecode(mysql_escape_string($_POST['title']));
$content = urldecode(mysql_escape_string($_POST['content']));
$category = $_POST['cat'];

echo $prodID . $title . $content . $category;

mysql_query("UPDATE product SET title='$title', content='$content', category_id='$category' WHERE id='$prodID'") or die("ERROR: ".mysql_error());

页面上的PHP显示

/* Get Product from Alias */
$alias = $_GET['name'];
$product_selectProd = mysql_query("SELECT * FROM product WHERE alias='$alias'") or die("ERROR: ". mysql_error());

/* Sort Query Vars */
while($product_arrayProd = mysql_fetch_array($product_selectProd)){
$product_category = $product_arrayProd['category_id'];
$product_title = urldecode($product_arrayProd['title']);
$product_text = urldecode($product_arrayProd['content']);
$product_image = $product_arrayProd['main_image'];
$product_sub_image = $product_arrayProd['sub_image'];

/* Build the Product List */
$productDetail .= "<img src='$product_image' width='350' height='240' class='prod_image_left' /><img src='$category_image' width='350' height='240' class='prod_image_right' />";
$productDetail .= "<p>&nbsp;</p><h1>Fiddes $product_title</h1><hr />";
$productDetail .= "$product_text";
}

最佳答案

来自 MDC:https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Functions#escape_and_unescape_Functions

The escape and unescape functions do not work properly for non-ASCII characters and have been deprecated. In JavaScript 1.5 and later, use encodeURI, decodeURI, encodeURIComponent, and decodeURIComponent.

所以不要使用转义,它已被弃用:)

关于php - 转义 urldecode 转义混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5179101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com