2013-02-12 109 views
0

我有几个字符串变量在我的PHP代码,如下所示:addslashes的只有逃避简单引号

"A piece of text with sometimes 'simple quotes' in it, and most important, 
some parts "between double quotes" inside the string itself, playing the role 
of quotations marks" 

不幸的是,我从一个数据库这个数据,并且需要把它放在一个JSON字符串格式。当我遍历由json_encode生成的JSON对象(我将数据作为关联数组与PDO进行编码然后对其进行编码)并对循环中的每个字符串使用addslashes时,只有简单引号会被转义。

(我知道这是不是良好的,但是这是我如何得到它从数据库中...)

这一切最奇怪的是,在文档中,我看到了双引号都此功能可逃过一劫,所以我试图把另一个在第一位置字符串中,以检查它是否会被转义:

$mystring = '"' . $mystring;

据逃出来的,我不知道别人为什么这在后来的字符串中没有。

这是我目前的片段(不转义双引号):

$dbh = new PDO("mysql:host=" . HOST . ";dbname=" . DATABASE, DB_USER, DB_PASSWORD); 

$data = $dbh -> query("MY SELECT REQUEST"); 
$result = $data -> fetchAll(PDO::FETCH_ASSOC); 

$result_inter; 

foreach ($result as $key => $entry) { 
    foreach ($entry as $key2 => $entry_inter) { 
     $new_value = $entry_inter; 
     $new_value = strip_tags($new_value); 
     $new_value = addslashes($new_value); 
     $new_key[$key2] = $new_value; 
    } 
    $result_inter[$key] = $new_key; 
} 

$result = json_encode($result_inter); 
echo($result); 

如果任何人有一个关于如何解决这个线索,我会很感激。

+0

你可以发布填充数组的代码吗? – hek2mgl 2013-02-12 16:28:54

+0

我通过使用'fetchAll(PDO :: FETCH_ASSOC);'从PDO中获取数据来填充数组。 – 2013-02-12 16:32:21

+0

需要整个循环(可能简化)..您可以将其添加到问题。我想我知道什么是错的,但需要代码。 – hek2mgl 2013-02-12 16:33:49

回答

2

如果你想要把它放在JSON,与addslashes使用json_encode而不是任何巫术。

+0

我已经在使用json_encode了......由于剩下的双引号导致JSON格式不正确。 – 2013-02-12 16:28:11

+0

@Selphira:'json_encode'的输出不可能是格式良好的。你正在做其他事情,显然有些事情是错的。它是什么? – Jon 2013-02-12 16:28:50

+0

我目前正在做一个简单的循环,用'strip_tags'调用,为了从一些属性中删除html标签,因为它们中的一些包含HTML内容,我认为它可能会发生冲突,所以我正在做这些测试删除无标签字符串的双引号。 你认为这可能是真正的原因吗? (我也删除他们,因为'回声',HTML将被格式化,我觉得它烦人调试。) – 2013-02-12 16:35:32

0

你不需要惹strip_tagsaddslashes或任何其他功能周围。如果你想用JSON编码你的数组,只需使用json_encode即可。

如果您想要避开引号,您可能会错过JSON_HEX_APOSJSON_HEX_QUOT等不同的可用选项。

例如:

$string = "'apo'"; 
echo json_encode($string , JSON_HEX_APOS); 

将输出"\u0027apo\u0027"

我想这就是你要找的内容。