我的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_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 :(得分:2)
如果你想把它放在JSON中,请使用json_encode
而不是addslashes
的任何巫术。
答案 1 :(得分:0)
您不需要使用strip_tags
,addslashes
或任何其他功能。如果要使用JSON对数组进行编码,只需使用json_encode
。
如果您想要转义引号,您可能错过了JSON_HEX_APOS
或JSON_HEX_QUOT
等不同可用选项的事实。
例如:
$string = "'apo'";
echo json_encode($string , JSON_HEX_APOS);
将输出"\u0027apo\u0027"
。
我认为这就是你正在寻找的东西。