我正在用 PHP 构建一个 WordPress 插件,让客户使用 OneSignal 将推送通知发送到移动应用程序。我有一个既是表单又是数据处理程序的函数,因为该操作是递归的:
<form name='fcnaddpush' id='fcnaddpush' action="<?php echo $_SERVER['REQUEST_URI']; ?>" METHOD="POST" />
当用户单击提交按钮时,该函数会调用自身,然后解析表单中输入的值,创建一个数组,使用 json_encode() 进行准备,然后通过 cURL 提交给 OneSignal 的 REST API。这一切都很好,直到.......
如果标题或内容包含撇号,则会产生问题。$_POST['title'] 在字符串中返回 \',并且 json_encode 双重转义它,所以现在它已成为它。当推送通知带有双转义撇号时,显示通知的 javascript 函数会终止,并且由于字符串已写入移动设备上的文件,因此如果不卸载并重新安装应用程序,则无法显示新旧通知。
看起来我可以通过在调用 json_encode() 之前使用 stripslashes($_POST['title']) 来解决这个问题。
问题是,我想,在使用 stripslashes() 时,其他“特殊字符”是否会产生意想不到的后果?有没有办法告诉 POST 方法使用 utf-8 而不是 urlencode?那还能用吗?