0

我的 PHP 代码中有一些字符串变量,如下所示:

"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 对象json_encode(我将数据作为关联数组与 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);

如果有人知道如何解决这个问题,我将不胜感激。

4

2 回答 2

2

如果你想把它放在 JSON 中,用.json_encode代替任何巫术addslashes

于 2013-02-12T16:27:07.113 回答
0

您不需要弄乱strip_tagsaddslashes任何其他功能。如果你想用 JSON 编码你的数组,只需使用json_encode.

您可能错过了一个事实,即有不同的可用选项,例如JSON_HEX_APOS或者JSON_HEX_QUOT如果您想转义引号。

前任:

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

将输出"\u0027apo\u0027".

我想这就是你要找的。

于 2014-09-10T14:51:41.110 回答