2013-03-27 3 views
-2

Заменить" на" beteween "": Моя проблема заключается в json_decode, база данных, которая создает эту JSon Пример:PHP - preg_replace() "в" между ""

{"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);

+3

[Что вы пробовали?] (Http://www.whathaveyoutried.com/) См [советуется] (HTTP: // stackoverflow.com/questions/ask-advice), пожалуйста. –

+0

Использовать достойный способ генерации JSON вместо этого? ['json_encode'] (http://php.net/manual/en/function.json-encode.php) очень полезен для этого. – h2ooooooo

+0

@JohnConde Вы видели [мета-обсуждение] (http://meta.stackexchange.com/questions/172758/what-have-you-tried-epidemic) по WHYT? Я сделал [gist] (https://gist.github.com/nojk/5214636), который, я думаю, более уместен. Мысли? – Kermit

ответ

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"} 
+1

это сработало! Большое спасибо –

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, если вы хотите просто предотвратить дальнейшие ошибки в " beacuse внутри строки.

+0

Мне действительно нужно preg_replace, например: $ return = preg_replace ('/ ("+) "(" +)/', "$ 1" $ 2 ", $ return); –

+0

Хорошо, тогда я, к сожалению, не могу вам помочь. Regex не моя вещь: S –

+0

И моя проблема в json_decode, базе данных, которая создает этот json –