我希望有一些正则表达式可以使用双黑色斜杠(\\
)检测并转义多个单引号。例如,如果有'
,那么它应该变为\\'
这里的挑战是:
1)它不应该逃避JSON使用的那些单引号。
以下示例:
{'Key1':'Value1','Key2':'Value2'}
它不应该逃避覆盖键和值的单引号。在上面的示例中,没有引号应该被转义。 应该转义值内的任何单引号。
2)它应该转义在Value内部存在的MULTIPLE单引号(在某些键值对中)。
以下是可以用作示例的挑战字符串:
挑战字符串:
{'AddressUsageId':''asd'','Edit':'Edit','SiteUsage':'Bi'llTo','PaymentTerm':'asd','SalesPerson':'S'A@,#$'%^''&*'()<>?`~','Language':'','PrimaryUsage':''''','InternalLocation':'T'est'}
它应该如下所示进行转义:
{'AddressUsageId':'\'asd\'','Edit':'Edit','SiteUsage':'Bi\'llTo','PaymentTerm':'asd','SalesPerson':'S\'A@,#$\'%^\'\'&*\'()<>?`~','Language':'','PrimaryUsage':'\'\'\'','InternalLocation':'T\'est'}
答案 0 :(得分:0)
单引号是 NOT 有效的JSON。如果你将字符串拉过jsonlint,它会告诉你。在PHP中生成JSON字符串的正确方法是在Array或Object上使用json_encode()
。如果需要转义,这将自动转义引号。
就你的问题而言。使用以下伪代码:
$s = $json_string without first 2 and last 2 characters
#$a is array of "key':'value"
$a = explode( $s, "','" );
foreach( $a as $i => $keyvalue ) {
$temp = explode( $keyvalue, "':'" );
#Now replace all instances of ' with \'
$temp = str_replace( "'", "\'", $temp );
#Now do something fancy to stitch everything back together.
}
答案 1 :(得分:0)
<script>
function removeSingleQuotesFromJSON(str)
{
var array = str.split('');
var strLength = str.length;
var resultStr= "";
for(var i=0; i<strLength; i++)
{
if(i>0)
{
if(array[i] == "'" && array[i-1] != "{" && array[i+1] != "}" && array[i+1] != ":" && array[i-1] != ":" && !(array[i+1] == "," && array[i+2] == "'") && !(array[i-1] == "," && array[i-2] == "'"))
{
resultStr+="\\" ;
}
}
resultStr+=""+array[i];
}
return resultStr;
} </script>