如何删除除逗号(,),冒号(:),双引号(“)和字符串PHP的花括号之外的所有特殊字符和空格

时间:2015-12-03 07:29:27

标签: php json regex

如何清理此JSON字符串数据?初看起来使用 str_replace 方法非常容易,但事实并非如此。此JSON字符串是表单JSON对象,具有ex的空格。 {“名字”:“某事”}。因此,当我将其转换为json字符串时,空字符将被不需要的字符串(\ u00a0)替换。我认为这个问题可以使用 preg_replace 解决,但突然间我不知道逗号,双引号,冒号的正则表达式。这个字符是json字符串格式所必需的。请帮帮我。

例如

       {"AS_applicant_Data__c":
            "{
                \"Last Name\u00a0\":\"SDFSAD\",
                \"First Name\u00a0\":\"SDFAFSDA\",
                \"Middle Name\u00a0\":\"SAFDSAFD\",
                \"Gender\u00a0\":\"Male\"
            }"
        }

        {"AS_applicant_Data__c":"
            "{
                "Last Name":"SDFSAD",
                "First Name":"SDFAFSDA",
                "Middle Name":"SAFDSAFD",
                "Gender":"Male"
            }"
        }

2 个答案:

答案 0 :(得分:1)

我使用此代码对我来说没问题:

<?php

$string = <<<EOD
{"AS_applicant_Data__c":
    "{
        \"Last Name\u00a0\":\"SDFSAD\",
        \"First Name\u00a0\":\"SDFAFSDA\",
        \"Middle Name\u00a0\":\"SAFDSAFD\",
        \"Gender\u00a0\":\"Male\"
    }"
}
EOD;
$pattern = '#\\\\u[0-9a-f]{4}#i';
$replacement = '';
echo preg_replace($pattern, $replacement, $string);

?>

这个正则表达式盲目地用\ uxxxx格式的空字符串替换Unicode char。如果您确定只有\ u00a0,则可以将正则表达式更改为#\\\\u00a0#i

尝试快速浏览:http://ideone.com/xW4zTN

答案 1 :(得分:0)

  

当我使用这个preg_replace("/[^a-zA-Z]/", "", $str);时,它会   删除所有特殊字符。有可能跳过   逗号,双引号,花括号和冒号?

当然是,只需在字符类中包含那些特殊字符(引号必须用反斜杠转义):

preg_replace("/[^a-zA-Z,\"{}:]/", "", $str);