解决URL出现%E2%80%8E(Zero-Width Space)

本文详细介绍了如何识别和处理URL中不易察觉的ZERO-WIDTHSPACE字符,这种字符可能导致链接错误,并提供了相应的代码示例来帮助过滤它们。了解如何通过简单步骤避免这类技术陷阱。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当URL出现%E2%80%8E就代表你的URL里面有包含一个ZERO-WIDTH SPACE (ZWSP)

这个是肉眼无法发现的空白,有时候你会觉得明明已经按下了,却怎么游标还在原地,没有移动到下一个字元去

 

这种时候就代表这两个字元中间有一个ZWSP的存在

ZWSP一般情况是打不出来的,但是如果你是透过WORD等等的文件编辑器复制贴上的

就很有可能含有ZWSP,一般情况下ZWSP并不影响阅读

但是当它变成URL的一部分,就会变成%E2%80%8E ,使你的URL错误


这都还算是好发现且好解决的

要是当他要拿来当hash的值做验证,如同下面这样

if(sha1($password)!== sha1($_POST['password'])){ // no permission }

 

就会发现密码看起来一样,可是却怎么也过不了的鬼打墙…

查起来很痛苦的…

可以透过下面的程式码过滤掉

// remove zero width space
$value = str_replace("\xe2\x80\x8b", '', $value);
$value = str_replace("\xe2\x80\x8c", '', $value);
$value = str_replace("\xe2\x80\x8d", '', $value);

 

参考资料:

  1. Wikipedia
  2. 老洪的IT学习系统

 

 

### 插入语句与约束条件分析 在创建 `Teacher` 表时,定义了以下字段及其约束条件[^1]: - `TNO`:字符类型,长度为6,不可为空。 - `NAME`:字符类型,长度为8,不可为空。 - `SEX`:字符类型,长度为2,可为空。 - `SAL`:整数类型,可为空。 - `SDEPT`:字符类型,长度为12,必须满足检查约束 `check (SDEPT IN('IS', 'MA', 'CS'))`。 为了确保插入的记录符合表的约束条件,必须满足以下要求: 1. `TNO` 和 `NAME` 字段不能为空。 2. `SDEPT` 字段的值必须是 `'IS'`、`'MA'` 或 `'CS'`。 3. 其他字段可以为空,但如果提供值,则需符合其数据类型的定义。 以下是符合上述约束条件的正确插入语句示例: ```sql INSERT INTO Teacher (TNO, NAME, SEX, SAL, SDEPT) VALUES ('T00001', '张三', '男', 5000, 'IS'); ``` 此语句中,`TNO` 和 `NAME` 字段提供了非空值,`SDEPT` 的值为 `'IS'`,符合检查约束。如果需要插入其他符合条件的记录,可以调整字段值,但必须遵循相同的规则。 #### 不符合约束条件的示例 以下是一些不符合约束条件的插入语句示例及其原因: 1. **`TNO` 字段为空**: ```sql INSERT INTO Teacher (TNO, NAME, SEX, SAL, SDEPT) VALUES (NULL, '李四', '女', 6000, 'CS'); ``` - 错误:`TNO` 字段不能为空。 2. **`SDEPT` 字段值不在允许范围内**: ```sql INSERT INTO Teacher (TNO, NAME, SEX, SAL, SDEPT) VALUES ('T00002', '王五', '男', 7000, 'PH'); ``` - 错误:`SDEPT` 的值必须为 `'IS'`、`'MA'` 或 `'CS'`。 3. **`NAME` 字段为空**: ```sql INSERT INTO Teacher (TNO, NAME, SEX, SAL, SDEPT) VALUES ('T00003', NULL, '女', 8000, 'MA'); ``` - 错误:`NAME` 字段不能为空。 ### 总结 只有当插入语句中的所有字段值均符合表定义中的约束条件时,才能成功执行插入操作。任何违反约束条件的尝试都会导致 SQL 错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值