对 filter_var($value, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH) 的函数调用创建如下输出:{"name":"Pete Johnson","address":"123 mainstreet","email":"[email protected]","password":"PA$$word"}
这就是 json_decode 不起作用的原因。
就像我在评论中说的。最好的选择是最初在输入上使用 json_decode,然后使用 HTML_Purifier 和/或 Zend_Validator 运行各个元素,或者编写自己的元素来处理各个字段。例如,电子邮件与密码具有不同的验证要求。
EDIT:
我尝试运行新功能,但无法让它工作。所以我做了一些调整以使其发挥作用。虽然我不确定这是否是您的正则表达式的目的。这是我从这段代码中得到的输出:
$input = '{"name":"Pete Johnson","address":"123 main street","email":"[email protected]","password":"PA$$word"}';
$cleanedInput = preg_replace("/[^+A-Za-z0-9]/", "", filter_var($input, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH));
echo $cleanedInput;
输出:34name3434PeteJohnson3434address3434123mainstreet3434email3434myemailgmailcom3434password3434PAword34