我正在通过ajax处理请求并返回json编码结果。
$sql = "SELECT * from products WHERE product_name='".$choosen."'";
$result = mysql_query($sql) or die("Error");
$row = mysql_fetch_assoc($result);
echo json_encode($row);
我在我的javascript中解析这个json,如下所示,
success:function(result)
{ var Data = JSON.parse(result); }
除了包含±符号的列外,每个数据都会返回并成功结束 ( column_1和column_2 )。我通过从数据库手动删除此(±)符号找到它,然后它工作正常。
所以我决定在每个实例中用'+或 - '替换'±'。我重写代码如下,
$sql="SELECT * from products WHERE product_name='".$choosen."'";
$result = mysql_query($sql) or die("Error");
$row = mysql_fetch_assoc($result);
$row["column_1"] = str_replace('±','+ or -',$row["column_1"]);
$row["column_2"] = str_replace('±','+ or -',$row["column_2"]);
echo json_encode($row);
现在问题是,** str_replace()不能用于此字符±。
我有两个选项来杀死这个bug。将'±'替换为此符号 要么 找到一种方法来编码±这个符号,json没有任何替换。但我不知道如何找到两种方法。请帮帮我。
答案 0 :(得分:0)
使用特殊字符进行查询时设置MySQL字符集。
编辑:评论中提到的deceze,请阅读以下答案:UTF-8 all the way through
答案 1 :(得分:0)
您可以使用chr()方法重新创建UTF-8字符字节,如下所示:
$row["column_1"] = str_replace(chr(0xc2).chr(0xB1),'+ or -',$row["column_1"]);
$row["column_2"] = str_replace(chr(0xc2).chr(0xB1),'+ or -',$row["column_2"]);
假设您在数据库中正确使用了UTF-8,问题只是在实际的PHP代码中使用了±字符。
此外,您可能希望使用HTML实体而不是字符串'+或 - '
±
将呈现为±
答案 2 :(得分:0)
感谢大家,花时间回答我的问题。我已经按照以下方式解决了这个问题,
$row["column_1"] =str_replace('?','±',utf8_decode($row["column_1"]));
$row["column_2"] =str_replace('?','±',utf8_decode($row["column_2"]));
我单独尝试使用utf8_decode()函数。但“±”符号替换为“?”。所以我再次使用替换功能来替换未知符号。无论如何,我暂时清除它,仍在努力永久清除它。谢谢你们们给了我这么好的答案。