You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity密码输入框含不可见异常字符致登录验证失败求助

问题:Unity登录页面密码验证失败,输入框存在不可见异常字符
  • 环境:基于PHP+Unity C#搭建游戏登录页面,数据库连接正常,核心功能可用
  • 现象:密码正确但始终提示「密码无效」,使用password_verify+password_hash验证失败;尝试SQL存储明文密码仍报错
  • 排查结果:
    • PHP查询逻辑无问题
    • Unity端密码输入框内容在发送至PHP前,存在无法复制、普通去空格函数无法识别的不可见异常字符;代码中直接写死密码则验证正常,用户名输入框无此问题
    • 尝试新建/复制用户名输入框仍无法解决

相关C#代码片段

public class ButtonVerify : MonoBehaviour
{
    public Button SubmitButton;
    public TMP_Text username;
    public TMP_Text password;
// Start is called before the first frame update
void Start()
{
    Button btn = SubmitButton.GetComponent<Button>();
    btn.onClick.AddListener(TaskOnClick);
}

void TaskOnClick()
{
    StartCoroutine(Login(username.text.ToString(), password.text.ToString()));
}
IEnumerator Login(string user_email, string user_pass)
{
    WWWForm form = new WWWForm();
    form.AddField("loginEmail", user_email);
    form.AddField("loginPassword", user_pass);

    using (UnityWebRequest www = UnityWebRequest.Post("imagine_theres_url",form))
    {
        yield return www.SendWebRequest();

        if(www.isNetworkError || www.isHttpError)
        {
            Debug.Log(www.error);
        }
        else
        {
            Debug.Log(www.downloadHandler.text);
        }
    }

}

解决方案建议

  1. 过滤所有不可见控制字符:用正则表达式移除密码中的非打印字符,替换后再提交请求,需引入using System.Text.RegularExpressions;

    string cleanedPassword = Regex.Replace(user_pass, @"[\p{Cc}\p{Cf}]", "");
    form.AddField("loginPassword", cleanedPassword);
    
  2. 检查输入框配置:

    • 确认TMP输入框的Content Type设为「Password」,关闭额外格式转换选项
    • 检查Character Validation规则,避免自动插入特殊字符
  3. 精准定位异常字符:打印密码每个字符的ASCII码,明确异常字符类型后针对性处理

    foreach (char c in user_pass)
    {
        Debug.Log($"字符: '{c}' | ASCII码: {(int)c}");
    }
    

内容的提问来源于stack exchange,提问作者ALQAWSI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:40:20