【问题标题】:Validate broken copy paste user input验证损坏的复制粘贴用户输入
【发布时间】:2016-11-15 14:51:05
【问题描述】:

我正在寻找一个 php 函数或库或建议,当客户复制和粘贴损坏的 utf8 字符串时,它可以验证损坏的表单输入值。

场景:

  1. 要求客户在
  2. 中输入街道名称
  3. 他打开了第三方存储地址的损坏页面
  4. 复制损坏的 utf8 字符串(参见示例)
  5. 将此字符串粘贴到输入字段中,然后单击提交

所以在服务器端,我收到“正确”的有效 utf8 值。

有没有办法捕捉到它,以便我可以捕捉到它并显示错误消息?

测试示例:

  • “At’s ‘em”
  • “博科夫斯基”

【问题讨论】:

  • 要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。
  • 您可以使用 preg_match 来验证输入是否有效!例如,您可以将其与字母和数字进行比较,例如:a-z A-Z 0-9 :)
  • 如果他们实际上粘贴了“At’s ‘em”这个词,那么他们实际上是在粘贴“At’s‘em”这个词"(就像我现在在这里做的那样)。没有什么是“坏”的,它只是不是你真正想要的角色(尽管我确实希望它们出现在这个评论中)。所以……这有点问题,因为没有明显的正确答案。什么时候坏了,什么时候不是它……?
  • @deceze 没错!关于我应该以何种方式寻找捕捉它的任何建议?我可以尝试逐个预测我认为错误的一切。但这将永远持续下去。
  • 第二种情况,粘贴一个�字符,已损坏无法修复,原始字符一去不复返了。在第一种情况下,您可以从 UTF-8 转换为拉丁文-1(左右)并将结果再次解释为 UTF-8;您可以尝试自动执行此操作,也许是递归的,直到您开始注意到字符被丢弃(因为它们不能用 Latin-1 表示),此时您已到达转换链的末端。确实,人类需要做出决定;也许会弹出一条消息“这看起来像mojibake”,然后提出一些猜测,让用户选择。

标签: php validation input utf-8


【解决方案1】:

因为没有确定值是否错误的通用方法,所以我最终匹配了正则表达式 [A-Za-z0-9\ -.,] 并在不匹配时向用户显示警告消息。

(@soheyl 建议)

【讨论】:

    【解决方案2】:

    起初UTF-8 字符串不能被破坏。该字符串可以包含非 utf-8 字符,这使它看起来像是“损坏”,而它只是一种不同的编码。

    PHP 具有检查给定字符串使用哪种编码的功能:

    string mb_detect_encoding ( string $str [, mixed $encoding_list = mb_detect_order() [, bool $strict = false ]] )
    

    来源:http://php.net/manual/en/function.mb-detect-encoding.php

    但它只检查给定字符串的编码类型,因此您只能检查是否使用了正确的编码。

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回答,但在这种情况下,它将始终是 UTF-8,因为它来自有效的 utf8 编码站点。
    猜你喜欢
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    相关资源
    最近更新 更多