PHP - preg_replace()“到'之间”“

时间:2013-03-27 14:35:20

标签: php regex replace preg-replace

将“替换为”之间的“”: 我的问题出在json_decode,即创建这个json的数据库 例如:

{"LOGRADOURO":"Joana D"Arc",
 "NUMERO":"257",
 "COMPLEMENTO":"",
 "BAIRRO":"barreiro"}

{"LOGRADOURO":"Joana D'Arc",
 "NUMERO":"257",
 "COMPLEMENTO":"",
 "BAIRRO":"barreiro"}

我真的需要一个preg_replace,如下所示: $ return = preg_replace('/(“+)”(“+)/”,“$ 1”$ 2“,$ return);

2 个答案:

答案 0 :(得分:0)

您可以先使用数组,然后替换每个条目中的"宽度'。之后,您使用json_encode。如果您的数据是json,请先使用json_decode

$str = array(
'LOGRADOURO'=> 'Joana D"Arc',
'NUMERO'=>'257',
'COMPLEMENTO'=>'',
'BAIRRO'=>'barreiro'
);

foreach($str as $sk => $s) {
$str[$sk] = str_replace('"', "'", $s);
}

echo json_encode($str);

如果您只想防止字符串中出现"的进一步错误,您也可以查看addslashes

答案 1 :(得分:0)

这个想法,我们不能替换所有的双引号,所以我想制作一种黑名单。不应替换以:{,开头的双引号,双引号:},之后的引号也是如此。我必须删除换行符/空格才能使其正常工作:

$json = '{"LOGRADOURO":"Joana D"Arc",
 "NUMERO":"257",
 "COMPLEMENTO":"",
 "BAIRRO":"barreiro"}';

$json = preg_replace(
array('/",[\s\r\n]+"/',          '/([^\:\{\,])(")([^\:\}\,])/'),
//       vvvvvvvvv                 vvvvvvvvvvvvvvvvvvvvvvvvv
// To remove the new lines         Replacing valid " with '
array('","', "$1'$3")
, $json);

echo $json; // {"LOGRADOURO":"Joana D'Arc","NUMERO":"257","COMPLEMENTO":"","BAIRRO":"barreiro"}