2015-01-09 5 views
-2

Я читаю строки из моей базы данных, для которой json_encode не работает. (С использованием PHP)Заменить «», только если заключены "

Мне нужно заменить все вхождения " с \", но только если возникновение уже включено "

Пример строки:.

{"val1": "This is "some value" that is inside of the "string" and such", "val2": "And here is yet another "value" that is messed up by quotation marks", "val3": "etc. etc."} 

Должен быть изменен на:

{"val1": "This is \"some value\" that is inside of the \"string\" and such", "val2": "And here is yet another \"value\" that is messed up by quotation marks", "val3": "etc. etc."} 
+2

lol, как вы узнаете, когда вы нажмете на закрытие '' '? – musefan

+2

точно, как json_encode «не работает»? Нет никакого способа, чтобы json_encode выдавал недействительный json. Он либо преуспевает, либо возвращает логическое значение false. он не возвращает неверную строку json. –

+3

Исправьте код ввода базы данных или избавитесь от руководства по строительству JSON. Вы не сможете надежно отменить повреждение. (Кстати, вы что-то пробовали?) – mario

ответ

0

Попробуйте эту инструкцию:

В первый заменить " с \"

И заменить снова регулярное выражение следующим образом:

$a='{"val1": "This is "some value" that is inside of the "string" and such", "val2": "And here is yet another "value" that is messed up by quotation marks", "val3": "etc. etc."}'; 
var_dump($a); 
$a=str_replace('"','\"',$a); 
var_dump($a); 
$re = "~(\\\\\")([^\":]+)(\\\\\"):\\s*(\\\\\")([^,]+)(\\\\\")([,}])~m"; 
$str =$a; 
$subst = "\"$2\": \"$5\"$7"; 
$a=preg_replace($re, $subst, $str); 
var_dump($a); 

live demo

Выход:

string '{"val1": "This is "some value" that is inside of the "string" and such", "val2": "And here is yet another "value" that is messed up by quotation marks", "val3": "etc. etc."}' (length=173) 

string '{\"val1\": \"This is \"some value\" that is inside of the \"string\" and such\", \"val2\": \"And here is yet another \"value\" that is messed up by quotation marks\", \"val3\": \"etc. etc.\"}' (length=191) 

string '{"val1": "This is \"some value\" that is inside of the \"string\" and such", "val2": "And here is yet another \"value\" that is messed up by quotation marks", "val3": "etc. etc."}' (length=179) 
Смежные вопросы