Php 如何在保持所有非英语字母表支持的同时清理字符串
一般来说,我会使用以下方法去除所有非英语字符:Php 如何在保持所有非英语字母表支持的同时清理字符串,php,sanitization,Php,Sanitization,一般来说,我会使用以下方法去除所有非英语字符: $file = filter_var($file, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH ); 但是,我厌倦了不支持来自其他语言的用户输入,这些语言可能是上传文件(文件名可能是西里尔文、中文或阿拉伯语等)或表单字段,甚至是所见即所得的内容 与此相关的数据消毒示例有两种形式之一 那些去除所有非英语字符的字符 将所有非英语字符转换为英语字母替代的
$file = filter_var($file, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH );
但是,我厌倦了不支持来自其他语言的用户输入,这些语言可能是上传文件(文件名可能是西里尔文、中文或阿拉伯语等)或表单字段,甚至是所见即所得的内容
与此相关的数据消毒示例有两种形式之一
- 那些去除所有非英语字符的字符
- 将所有非英语字符转换为英语字母替代的字符
- 非UTF-8字节:拒绝400(“错误请求”)
- 包含路径元素的字符串(如
):接受。/
- 包含路径元素(如
)的文件名(非文件路径):用400拒绝。/
- 文件名
,
或标志.png
:接受аБГаП.png
- 文件名
:接受foo bar.jpg
- 编号
:以400拒绝abc
- 编号
:接受1234
- 非UTF-8字节:不可能发生,它们以前被拒绝过
- 包含路径元素的文件名:不可能,它们以前被拒绝过
- 文件名
,
或标志.HTML中的png
如果HTML编码为UTF-8,则使用逐字逐句,使用默认ISO8859-1时替换为HTML实体аБПП.png
- 文件名
,
或标志.在Bash中,png
:假设文件系统的编码为UTF-8,则使用逐字记录аБГаП.png
- 文件名
,
或标志.png
在SQL中:可能只是引用,取决于驱动程序、数据库、表等。请参阅手册
- HTML中的文件名
:转义为“foo bar.jpeg”。可能用“”表示空格foo bar.jpg
- Bash:Quote或escape“”中的filename
,带反斜杠foo bar.jpg
- SQL中的filename
:只需引用即可foo bar.jpg
- 编号
:不可能发生,他们以前被拒绝过abc
- HTML中的数字
:使用逐字记录1234
- Bash中的number
:使用逐字记录(不确定)1234
- SQL中的数字
:使用逐字记录1234
- 定义内部类型(字符串、文件名、数字)并拒绝任何不匹配的内容。这些类型创建约束(文件名不包括路径元素)并提供保证(文件名可以附加到目录以在该目录中形成文件名)
- 为HTML使用模板库(我想到了小胡子)
- 为SQL使用DB包装库(PDO、SPRIPE、条令)
- 转义外壳参数。我不知道该走哪条路,但我相信你会找到合适的方法
转义不是一个已定义的过程,而是一系列过程。实际使用的转义算法取决于目标上下文。除了你写的(“逃跑也会弄糟名字”),实际情况应该是相反的!基本上,它确保在XML中包含小于号的字符串仍然是包含小于号的字符串,并且不会变成格式错误的XML片段。为了实现这一点,转义将转换字符串,以防止任何通常不被解释为文本的字符获得其正常解释,如shell中的空格字符。我使用null作为示例。简单地检查UTF-8或不检查UTF-8并不能清除输入中的“坏”字符或字符串。我所说的坏,是指有害的。如果您看看
过滤器\u var
示例的功能,您就会明白我在寻找什么。它不只是一个字符。我个人的做法是,在将它们集成到html或SQL查询之前,修复我的软件以正确地转义它们。更好的是,在一个框架上构建软件,使它几乎可以