在构建票务系统前端时,我偶然发现了我们的 QA 团队发现的一个问题。
问题是我们没有过滤任何不可打印的字符,这可能会导致奇怪的问题:
- 复制粘贴示例代码不起作用
- 客户通过粘贴多个不可打印的字符来滥用表单,这实际上没有任何意义
如果我们要求客户输入任何不可打印的字符,我们可以要求他上传一个文本文件到工单。
那么,去除非印刷品时应该考虑什么?
我要提前感谢所有参与本次讨论的人!
在构建票务系统前端时,我偶然发现了我们的 QA 团队发现的一个问题。
问题是我们没有过滤任何不可打印的字符,这可能会导致奇怪的问题:
如果我们要求客户输入任何不可打印的字符,我们可以要求他上传一个文本文件到工单。
那么,去除非印刷品时应该考虑什么?
我要提前感谢所有参与本次讨论的人!
显然,基于此资源有 2 组 UTF-8 不可打印控制字符:
考虑到这一点,函数中的数组将如下所示:
array(
'/\x00/', '/\x01/', '/\x02/', '/\x03/', '/\x04/',
'/\x05/', '/\x06/', '/\x07/', '/\x08/', '/\x09/',
'/\x0A/', '/\x0B/', '/\x0C/', '/\x0D/', '/\x0E/', '/\x0F/', '/\x10/',
'/\x11/', '/\x12/', '/\x13/', '/\x14/', '/\x15/', '/\x16/', '/\x17/',
'/\x18/', '/\x19/', '/\x1A/', '/\x1B/', '/\x1C/', '/\x1D/', '/\x1E/',
'/\x1F/', '/\x7F/', '/\xC2 \x80/', '/\xC2 \x81/', '/\xC2 \x82/',
'/\xC2 \x83/', '/\xC2 \x84/', '/\xC2 \x85/', '/\xC2 \x86/', '/\xC2 \x87/',
'/\xC2 \x88/', '/\xC2 \x89/', '/\xC2 \x8A/', '/\xC2 \x8B/', '/\xC2 \x8C/',
'/\xC2 \x8D/', '/\xC2 \x8E/', '/\xC2 \x8F/', '/\xC2 \x90/', '/\xC2 \x91/',
'/\xC2 \x92/', '/\xC2 \x93/', '/\xC2 \x94/', '/\xC2 \x95/', '/\xC2 \x96/',
'/\xC2 \x97/', '/\xC2 \x98/', '/\xC2 \x99/', '/\xC2 \x9A/', '/\xC2 \x9B/',
'/\xC2 \x9C/', '/\xC2 \x9D/', '/\xC2 \x9E/', '/\xC2 \x8F/'
);
我们目前正在使用以下 PHP 方法:
function filterNonPrintableCharacters($text)
{
$text = preg_replace(
array(
'/\x00/', '/\x01/', '/\x02/', '/\x03/', '/\x04/',
'/\x05/', '/\x06/', '/\x07/', '/\x08/', '/\x09/',
'/\x0B/','/\x0C/','/\x0D/', '/\x0E/', '/\x0F/', '/\x10/', '/\x11/',
'/\x12/','/\x13/','/\x14/','/\x15/', '/\x16/', '/\x17/', '/\x18/',
'/\x19/','/\x1A/','/\x1B/','/\x1C/','/\x1D/', '/\x1E/', '/\x1F/'
),
'',
$text
);
return $text;
}
我可能遗漏了一些东西,因此我将不胜感激任何评论。