删除主题时,会变更主题表 pre_forum_thread:
displayorder = -1
moderated = 1
帖子表(或分表) pre_forum_post* 该主题的所有帖子的
invisible = -1
同时 pre_forum_threadmod 会新增一条 DEL 记录,用于显示到 Discuz! 控制面板 - 内容 - 主题回收站。
删除回帖时,会变更回帖表 pre_forum_post(或分表):
invisible = -5
屏蔽回复时,会变更回复表 pre_forum_post(或分表):
status = 1

Code 128 条形码可以表示全部 128 个 ASCII 码字符(数字、大小写字母、符号和控制符)。
Code 128 有三个子集:Code 128A、Code 128B 和 Code 128C。
Code 128A 用来编码数字、大写字母、控制符、部分符号;
Code 128B 用来编码数字、大写字母、小写字母、符号;
Code 128C 用来编码 2 位数字 [00,99]。
码条大小有 4 种,按照宽度,我们用 1、2、3、4 来表示。
一个完整的 Code 128 条码是由:起始符、字符串、检验位、终止符组成的。
每个字符由 3 个条、3 个空、11 个单元构成,字符串可变长。
黑色线条用 B(Bar)表示,白色空位用 S(Space)表示,那么一个字符是由 BSBSBS 组成的。
起始符有三种,“CODE-A”、“CODE-B”和“CODE-C”。起始符的类型决定了后面字符的构成。
当采用码来设置字符时(CODE-A、CODE-B 和 CODE-C),起始符为 CODE-A 的条码在条码的处理中可以变为采用 CODE-B 或 CODE-C 栏的字符。
当采用“SHIFT”时,只有紧靠 SHIFT 的一个字符可以在下一栏被变更(A 到 B,B 到 C,C 到 A)。(和电脑键盘上的 SHIFT 键操作类似)
校验字符通过 MOD103 算法,下面举例说明:
例 1:xoyozo.net
信息:StartB x o y o z o . n e t
值:104 88 79 89 79 90 79 14 78 69 84
位置:- 1 2 3 4 5 6 7 8 9 10
计算:104 + 88 * 1+ 79 * 2 + 89 * 3 + 79 * 4 +90 * 5 + 79 * 6 + 14 * 7 + 78 * 8 + 69 * 9 + 84 * 10 = 4040
取模:4040 % 103 = 23
完整的条形码信息: (Start B)xoyozo.net(7)(STOP)
例 2:C08244
信息:StartB C 0 CodeC 82 44
值:104 35 16 99 82 44
位置:- 1 2 3 4 5 6
计算:104 + 35 * 1+ 16 * 2 + 99 * 3 + 82 * 4 +44 * 5 = 1016
取模:1016 % 103 = 89
完整的条形码信息: (Start B)C0(CodeC)8244(y)(STOP)
在线示例:https://xoyozo.net/Tools/Code128
附 Code 128 编码表:
Value | Code A | Code B | Code C | Pattern | ASCII Code |
BSBSBS | |||||
0 | SP | SP | 00 | 212222 | SP (ASCII 32) |
1 | ! | ! | 01 | 222122 | ! (ASCII 33) |
2 | " | " | 02 | 222221 | " (ASCII 34) |
3 | # | # | 03 | 121223 | # (ASCII 35) |
4 | $ | $ | 04 | 121322 | $ (ASCII 36) |
5 | % | % | 05 | 131222 | % (ASCII 37) |
6 | & | & | 06 | 122213 | & (ASCII 38) |
7 | ' | ' | 07 | 122312 | ' (ASCII 39) |
8 | ( | ( | 08 | 132212 | ( (ASCII 40) |
9 | ) | ) | 09 | 221213 | ) (ASCII 41) |
10 | * | * | 10 | 221312 | * (ASCII 42) |
11 | + | + | 11 | 231212 | + (ASCII 43) |
12 | , | , | 12 | 112232 | , (ASCII 44) |
13 | - | - | 13 | 122132 | - (ASCII 45) |
14 | . | . | 14 | 122231 | . (ASCII 46) |
15 | / | / | 15 | 113222 | / (ASCII 47) |
16 | 0 | 0 | 16 | 123122 | 0 (ASCII 48) |
17 | 1 | 1 | 17 | 123221 | 1(ASCII 49) |
18 | 2 | 2 | 18 | 223211 | 2 (ASCII 50) |
19 | 3 | 3 | 19 | 221132 | 3 (ASCII 51) |
20 | 4 | 4 | 20 | 221231 | 4 (ASCII 52) |
21 | 5 | 5 | 21 | 213212 | 5 (ASCII 53) |
22 | 6 | 6 | 22 | 223112 | 6 (ASCII 54) |
23 | 7 | 7 | 23 | 312131 | 7 (ASCII 55) |
24 | 8 | 8 | 24 | 311222 | 8 (ASCII 56) |
25 | 9 | 9 | 25 | 321122 | 9 (ASCII 57) |
26 | : | : | 26 | 321221 | : (ASCII 58) |
27 | ; | ; | 27 | 312212 | ; (ASCII 59) |
28 | < | < | 28 | 322112 | < (ASCII 60) |
29 | = | = | 29 | 322211 | = (ASCII 61) |
30 | > | > | 30 | 212123 | > (ASCII 62) |
31 | ? | ? | 31 | 212321 | ? (ASCII 63) |
32 | @ | @ | 32 | 232121 | @ (ASCII 64) |
33 | A | A | 33 | 111323 | A (ASCII 65) |
34 | B | B | 34 | 131123 | B (ASCII 66) |
35 | C | C | 35 | 131321 | C (ASCII 67) |
36 | D | D | 36 | 112313 | D (ASCII 68) |
37 | E | E | 37 | 132113 | E (ASCII 69) |
38 | F | F | 38 | 132311 | F (ASCII 70) |
39 | G | G | 39 | 211313 | G (ASCII 71) |
40 | H | H | 40 | 231113 | H (ASCII 72) |
41 | I | I | 41 | 231311 | I (ASCII 73) |
42 | J | J | 42 | 112133 | J (ASCII 74) |
43 | K | K | 43 | 112331 | K (ASCII 75) |
44 | L | L | 44 | 132131 | L (ASCII 76) |
45 | M | M | 45 | 113123 | M (ASCII 77) |
46 | N | N | 46 | 113321 | N (ASCII 78) |
47 | O | O | 47 | 133121 | O (ASCII 79) |
48 | P | P | 48 | 313121 | P (ASCII 80) |
49 | Q | Q | 49 | 211331 | Q (ASCII 81) |
50 | R | R | 50 | 231131 | R (ASCII 82) |
51 | S | S | 51 | 213113 | S (ASCII 83) |
52 | T | T | 52 | 213311 | T (ASCII 84) |
53 | U | U | 53 | 213131 | U (ASCII 85) |
54 | V | V | 54 | 311123 | V (ASCII 86) |
55 | W | W | 55 | 311321 | W (ASCII 87) |
56 | X | X | 56 | 331121 | X (ASCII 88) |
57 | Y | Y | 57 | 312113 | Y (ASCII 89) |
58 | Z | Z | 58 | 312311 | Z (ASCII 90) |
59 | [ | [ | 59 | 332111 | [ (ASCII 91) |
60 | \ | \ | 60 | 314111 | \ (ASCII 92) |
61 | ] | ] | 61 | 221411 | ] (ASCII 93) |
62 | ^ | ^ | 62 | 431111 | ^ (ASCII 94) |
63 | _ | _ | 63 | 111224 | _ (ASCII 95) |
64 | NUL | ` | 64 | 111422 | ` (ASCII 96) |
65 | SOH | a | 65 | 121124 | a (ASCII 97) |
66 | STX | b | 66 | 121421 | b (ASCII 98) |
67 | ETX | c | 67 | 141122 | c (ASCII 99) |
68 | EOT | d | 68 | 141221 | d (ASCII 100) |
69 | ENQ | e | 69 | 112214 | e (ASCII 101) |
70 | ACK | f | 70 | 112412 | f (ASCII 102) |
71 | BEL | g | 71 | 122114 | g (ASCII 103) |
72 | BS | h | 72 | 122411 | h (ASCII 104) |
73 | HT | i | 73 | 142112 | i (ASCII 105) |
74 | LF | j | 74 | 142211 | j (ASCII 106) |
75 | VT | k | 75 | 241211 | k (ASCII 107) |
76 | FF | l | 76 | 221114 | l (ASCII 108) |
77 | CR | m | 77 | 413111 | m (ASCII 109) |
78 | SO | n | 78 | 241112 | n (ASCII 110) |
79 | SI | o | 79 | 134111 | o (ASCII 111) |
80 | DLE | p | 80 | 111242 | p (ASCII 112) |
81 | DC1 | q | 81 | 121142 | q (ASCII 113) |
82 | DC2 | r | 82 | 121241 | r (ASCII 114) |
83 | DC3 | s | 83 | 114212 | s (ASCII 115) |
84 | DC4 | t | 84 | 124112 | t (ASCII 116) |
85 | NAK | u | 85 | 124211 | u (ASCII 117) |
86 | SYN | v | 86 | 411212 | v (ASCII 118) |
87 | ETB | w | 87 | 421112 | w (ASCII 119) |
88 | CAN | x | 88 | 421211 | x (ASCII 120) |
89 | EM | y | 89 | 212141 | y (ASCII 121) |
90 | SUB | z | 90 | 214121 | z (ASCII 122) |
91 | ESC | { | 91 | 412121 | { (ASCII 123) |
92 | FS | | | 92 | 111143 | | (ASCII 124) |
93 | GS | } | 93 | 111341 | } (ASCII 125) |
94 | RS | ~ | 94 | 131141 | ~ (ASCII 126) |
95 (Hex 7F) | US | DEL | 95 | 114113 | DEL (ASCII 127) |
96 (Hex 80) | FNC 3 | FNC 3 | 96 | 114311 | Ç (ASCII 128) |
97 (Hex 81) | FNC 2 | FNC 2 | 97 | 411113 | ü (ASCII 129) |
98 (Hex 82) | SHIFT | SHIFT | 98 | 411311 | é (ASCII 130) |
99 (Hex 83) | CODE C | CODE C | 99 | 113141 | â (ASCII 131) |
100 (Hex 84) | CODE B | FNC 4 | CODE B | 114131 | ä (ASCII 132) |
101 (Hex 85) | FNC 4 | CODE A | CODE A | 311141 | à (ASCII 133) |
102 (Hex 86) | FNC 1 | FNC 1 | FNC 1 | 411131 | å (ASCII 134) |
103 (Hex 87) | START (Code A) | 211412 | ‡ (ASCII 135) | ||
104 (Hex 88) | START (Code B) | 211214 | ˆ (ASCII 136) | ||
105 (Hex 89) | START (Code C) | 211232 | ‰ (ASCII 137) | ||
106 (Hex 6A) | STOP (All Codes) | 2331112 | Š (ASCII 138) |

ASP.NET MVC 项目发布到 IIS 上,出现服务器错误“403 - 禁止访问:访问被拒绝”,排除权限设置问题后,原因在于 MVC 的 URL 通常没有扩展名,IIS 并未将其交由 ASP.NET 托管处理。
经过各种找资料,各种尝试后,最终确定:项目本身没有问题,本地运行正常,发布到另一台服务器上正常。
删除服务器 IIS 上的该网站和应用程序池,重新创建网站,恢复正常。原因未知。

官网示例 | 国内示例 | ||
Metronic | 收费 | 最新 | |
Unify | 收费 | ||
Angulr | 收费 | Angular HTML | 本站 Angular v2.2.0 本站 HTML v2.2.0 |
AdminLTE | 免费开源 | 最新 | 本站 v2.4.2 |
Color Admin | 收费 | 最新 | |
更多 …… |
浏览示例前,将以下域名的重定向加入到 hosts 中可以加快页面的打开速度:
127.0.0.1 fonts.googleapis.com
127.0.0.1 ajax.googleapis.com
127.0.0.1 player.vimeo.com
127.0.0.1 www.vimeo.com

可以改为乘以一个数后取整,再除以这个数,例如,将浮点数 f 精确到百分位:
f.toFixed(2)
替换为:
Math.round(f * 100) / 100
但需要注意一个细节,toFixed() 是四舍六入五成双,Math.round 是四舍五入。

在 MySQL 中,int 的取值范围是 [-2147483648, 2147483647],占用 4 个字节。
int(M) 中 M 的默认值为 11,该值不影响取值范围和占用字节,仅表示最大显示宽度。
以某 int 字段存储的记录值为 2147483647 为例:
类型为 int(1) 时,SELECT 结果为 214
类型为 int(2) 时,SELECT 结果为 2147
……
类型为 int(7) 时,SELECT 结果为 214748364
类型为 int(8) ~ int(11) 时,SELECT 结果为 2147483647
测试结果跟网上的说法不同
如果添加了 zerofill 属性,当然是填充零的效果,仍以上述值为例:
类型为 int(1) 时,SELECT 结果为 214
类型为 int(2) 时,SELECT 结果为 2147
……
类型为 int(7) 时,SELECT 结果为 214748364
类型为 int(8) ~ int(10) 时,SELECT 结果为 2147483647
类型为 int(11) 时,SELECT 结果为 02147483647
结论,既然 M 值不影响取值范围和占用字节,那么何必去改它呢。除非有特殊业务需求,否则很容易引起逻辑混乱,特别是当你误认为它是用来限定取值范围或节省存储空间的时候。

发布选项 \ 项目类型 | Web 窗体网站 | Web 应用程序 (Web 窗体) | Web 应用程序 (MVC) | ASP.NET Core Web 应用程序 |
在发布期间预编译 Precompile during publishing | 若勾选,将 .cs 文件编译为 .dll | 无论是否勾选,都将 .cs 文件编译为 .dll | ||
允许更新预编译站点 Allow precompiled site to be updatable | 若不允许,则会将 .aspx 等页面也一同编译,并以内容“这是预编译工具生成的标记文件,不应删除!”代替 |
未进行完整的测试和分析,总结有误请指正。

函数功能:添加/修改/删除/获取 URL 中的参数(锚点敏感)
/// <summary>
/// 设置 URL 参数(设 value 为 undefined 或 null 删除该参数)
/// <param name="url">URL</param>
/// <param name="key">参数名</param>
/// <param name="value">参数值</param>
/// </summary>
function fn_set_url_param(url, key, value) {
// 第一步:分离锚点
var anchor = "";
var anchor_index = url.indexOf("#");
if (anchor_index >= 0) {
anchor = url.substr(anchor_index);
url = url.substr(0, anchor_index);
}
// 第二步:删除参数
key = encodeURIComponent(key);
var patt;
// &key=value
patt = new RegExp("\\&" + key + "=[^&]*", "gi");
url = url.replace(patt, "");
// ?key=value&okey=value -> ?okey=value
patt = new RegExp("\\?" + key + "=[^&]*\\&", "gi");
url = url.replace(patt, "?");
// ?key=value
patt = new RegExp("\\?" + key + "=[^&]*$", "gi");
url = url.replace(patt, "");
// 第三步:追加参数
if (value != undefined && value != null) {
value = encodeURIComponent(value);
url += (url.indexOf("?") >= 0 ? "&" : "?") + key + "=" + value;
}
// 第四步:连接锚点
url += anchor;
return url;
}
/// <summary>
/// 获取 URL 参数(无此参数返回 null,多次匹配使用“,”连接)
/// <param name="url">URL</param>
/// <param name="key">参数名</param>
/// </summary>
function fn_get_url_param(url, key) {
key = encodeURIComponent(key);
var patt = new RegExp("[?&]" + key + "=([^&#]*)", "gi");
var values = [];
while ((result = patt.exec(url)) != null) {
values.push(decodeURIComponent(result[1]));
}
if (values.length > 0) {
return values.join(",");
} else {
return null;
}
}
调用示例:
var url = window.location.href;
// 设置参数
url = fn_set_url_param(url, 'a', 123);
// 获取参数
console.log(fn_get_url_param, url, 'a');
压缩版:
function fn_set_url_param(b,c,e){var a="";var f=b.indexOf("#");if(f>=0){a=b.substr(f);b=b.substr(0,f)}c=encodeURIComponent(c);var d;d=new RegExp("\\&"+c+"=[^&]*","gi");b=b.replace(d,"");d=new RegExp("\\?"+c+"=[^&]*\\&","gi");b=b.replace(d,"?");d=new RegExp("\\?"+c+"=[^&]*$","gi");b=b.replace(d,"");if(e!=undefined&&e!=null){e=encodeURIComponent(e);b+=(b.indexOf("?")>=0?"&":"?")+c+"="+e}b+=a;return b}
function fn_get_url_param(b,c){c=encodeURIComponent(c);var d=new RegExp("[?&]"+c+"=([^&#]*)","gi");var a=[];while((result=d.exec(b))!=null){a.push(decodeURIComponent(result[1]))}if(a.length>0){return a.join(",")}else{return null}};

在网站开发过程中遇到上传图片等文件的功能,需要在服务器上设置该目录可写入,并且必须防止被上传 .php 等可执行的脚本文件。
根据文件所有者的不同,我们分两种情况讨论:
一、程序上传的用户与执行 PHP 的用户不同(例如程序代码通过 SSH 上传(root 用户),而 PHP 以 www 身份运行)
由于 Linux 上的文件默认权限是 644,目录默认权限是 755,所以在这种情况下,PHP 不能修改 root 上传的程序文件,也不能将客户端上传的图片文件保存到服务器上。
例如我们将客户端上传的文件指定到 /upload/ 目录,那么,
第 1 步,赋予它写入权限:
chmod 777 upload
递归所有子目录请加 -R 参数,但会将文件也更改为 777,赋予了执行权限,这是不建议的。文件若需写入权限请设为 666。
第 2 步,设置该目录下不允许执行 PHP:
我们无法保证客户端上传完全符合我们要求的文件,那么必须禁止任何文件的执行权限。(此处指 PHP 的执行权限,注意与 sh 执行权限的区别,后者由 chmod 命令修改)
nginx 的 .conf 文件配置示例:
location ~ /upload/.*\.(php|php5)?$
{
deny all;
}
Apache 的 .htaccess 文件配置示例:
RewriteRule upload/(.*).(php)$ – [F]
特别注意:上面的代码必须加在 PHP 引用配置的上方才有效(如 nginx 的 PHP 引用配置 include enable-php-**.conf;)
默认 Linux 系统是大小写敏感的,所以规则中的正则表达式无须忽略大小写(但必须与实际的目录或文件名大小写一致),因为 MIME 类型中设置的是小写的 .php,那么类似大写的 .PHP 文件是不被 php-fpm 解释的,结果是被当作普通文本返回到客户端。
提问:有些目录需要设置为可写入,但里面还有正常的 php 文件,禁止执行会有问题吗?(例如 Discuz! 的 config 目录,ThinkPHP 的 Runtime 目录)
解答:以 Discuz! 为例,config 下面虽然有 config_*.php 等配置文件,但这些文件并非直接供客户端浏览,而是被其它 .php 文件引用(include 方式、IO 方式等),当 config 目录禁止执行 PHP 后并不会对它们造成影响。
我们在开发程序的过程中应避免在允许写入的目录下放置直接供客户端浏览的 .php 文件。
二、程序上传的用户与执行 PHP 的用户相同(例如程序代码通过 FTP 上传,且和 PHP 一样,都使用 www 用户)
常见于虚拟空间。这种情况下,通过 PHP 上传的文件可以保存到该网站下面的任何目录下(甚至是网站目录之外,即传说中的跨站),原因大家都懂,默认 755 中第一个是“7”,即所有者拥有写入权限。
因此,除了做到上述设置,我们必须严格控制客户端上传文件的保存路径,做到以下几点:
必须更改客户端上传的文件名,而非直接使用原文件名;
不得从客户端文件名获取扩展名,或者只控制允许的后缀名。
最可靠的文件类型判别方式是分析文件签名,参考:文件签名表,以防篡改后缀名欺骗。
举个早期的栗子:上传文件名为 abc.asp;.jpg,未改文件名保存到服务器,浏览器直接访问该文件,IIS 6 当作 abc.asp 来解析。

优点 | 缺点 | |
大白菜 | 可还原 U 盘空间 支持 UEFI | 众多山寨产品,分不清哪个是正宗老牌,说不定还是新秀更优秀 Window 10 自带防病毒软件 Window Defender 提示发现威胁 一键制作的大白菜U盘,将 iso 拷入U盘后安装的纯净系统会被捆绑安装垃圾软件 |
老毛桃 | 可还原 U 盘空间 支持 UEFI PE 还不错 | “ISO 模式”没什么问题,但“一键制作”的是 FAT32 格式,不支持将大于 4GB 的 ISO 镜像拷贝到 U 盘 “模拟启动”可启动老毛桃界面,但直接写入硬盘映像的 U 盘无法模拟启动 卸载时,Window 10 自带防病毒软件 Window Defender 提示发现特洛伊木马 |
软碟通 UltraISO | 中规中矩 写入硬盘不会自动还原 U 盘空间 | 网上找序列号激活 |
推荐! | 开源 可同时拷入多个系统镜像文件,并支持启动时选择 可支持格式化为多种文件格式 一键制作,可升级 | 暂无 |
软碟通制作 Windows 系统安装盘过程:
下载微软官方提供的 iso 系统镜像文件
如果 U 盘容量缩水,或根本无法正常使用 U 盘,使用老毛桃还原 U 盘空间
打开 UltraISO,打开要写入 U 盘的 iso 文件
在菜单上选择:启动 - 写入硬盘映像...
选择硬盘驱动器,格式化,写入(注意:点击“写入”是按 FAT32 重新格式化的,若要制作 NTFS 文件系统的 U 盘,请先按 NTFS 格式化,然后在此界面上点击“便捷启动”-“便捷写入”)
如果 U 盘足够大,可以在 U 盘里多放几个系统镜像,双击打开另一个 iso,将所有文件和文件夹复制到 U 盘上新建的目录中。这样下次需要安装什么系统时,只要把对应的系统的文件放到 U 盘根目录,其它系统移到二级目录中即可。当然还可以往里面存放一些常用软件。
另外最好常备一个带有 PE 系统的启动盘,在旧电脑上安装旧系统时经常会用到。
如果在分区那步无法删除或创建分区(提示动态卷什么的),在确认放弃磁盘中的文件的前提下,可以使用 Shift + F10 调出命令行,键入 diskpart,列出磁盘(list disk),选择磁盘(select disk 0),清除(clean),注意 U 盘启动盘也会在列表中,勿删!
