替换±符号时,Str_replace无效

时间:2013-11-18 12:26:43

标签: javascript php json encoding

我正在通过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没有任何替换。但我不知道如何找到两种方法。请帮帮我。

3 个答案:

答案 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()函数。但“±”符号替换为“”。所以我再次使用替换功能来替换未知符号。无论如何,我暂时清除它,仍在努力永久清除它。谢谢你们们给了我这么好的答案。