webexam项目杂记

sql 语句 数据库 本身 有数据类型的区分,对于mysql的字符串默认的用单引号''来表示,因此,整个sql 语句就要用双引号来括。

如:

 $sql = "SELECT * FROM user_verify
WHERE username='". $_POST['user'].
"' AND passwd='".$_POST['pw']."' limit 1";

为了防止sql注入攻击,如畸形密码,foo用户名,密码 ' or '1'='1 'or ''='等等 这样就会形成sql注入攻击

或者说,在尽可能的情况下,用单引号,实在不行,就用双引号

虚拟机使用的设备都是虚拟设备,所以不存在给“设备”装驱动的问题

虚拟机的显卡是虚拟的svga 2, 其显示性能肯定是达不到物理显卡的效果的,这是正常的

最好不要因为显示原因,去修改*.vmx配置文件,例如,添加svga.enable3d="TRUE"后,虚拟机将不能启动!

mysql_real_escape_string包装器?

转义:是指把字面上的字符,如n,改变它原来的意思:如\n

转义字符:只能是小写字母,转义字符仍然只是一个字符

有三种形式: \a, \ddd(8进制),\xhh(十六进制)

escape:就是“转义”的意思[计算机]. escape string 就是转义字符(串)的意思

**使用mysql_real_escape_string将会把 用户输入的字符串内容 中的特殊字符(包括:\n,\r ,, ',",\x00,\x41之类表示的字符常量a)转义,php-mysql编程中常用的主要是4个:',", \, null=\x00 **

magic_quotes魔术引号

在php5.4.0+去除了魔术引号

get_magic_quotes_gpc() 获取/(不能在运行时用set去设置)http请求数据:GET/POST/COOKIE的魔术引号的设置情况

如果magic_quotes_gpc设为on,则返回1,设为off(关闭),则返回0

PHP 5.4 之前 PHP 指令 magic_quotes_gpc 默认是 on, 实际上所有的 GET、POST 和 COOKIE 数据都用被 addslashes() 了。 不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。 遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。

对外部输入的数据/变量进行转义

有三个都可以进行转义:addslashes, htmlspecialchars, htmlentities

在magic_quotes_gpc为off时,

  • 要写入数据库的数据,一般对' " \ 进行转义,避免sql语句出错,用addslashes
  • 对从留言板等提交的数据,在php程序内处理,不写入数据库,一般用 htmlspecialchars(用在:显示源代码使标签失效;防止sql注入攻击)
  • 对所有的html标记进行转义,用htmlentities.

文件夹命名规则: 通常用单数,对于一些常见的,如images,scripts,logs等,以及明显的多个确切事物的,用复数

魔术引号magic_quotes主要是针对写入数据库的sql语句,虽然名字是针对引号,但是也针对\n,\r,,等。

写文档/写程序 应多使用英文,除非确实不能避免。 而且写文档的人称通常不用人,多使用分词短语,动名词,不定式(短语)等。

关于风格/样式; Allow ASP-style <% %> tags.

asp_tags = Off

bypass:n. 旁路,旁道,绕城公路; vt.绕过,绕行;忽略

itook the bypass. i bypassed the manager and went straight to the owner.

语言结构

即(语言构造器),并不是函数,/加括号的并不一定是函数!

有: echo print, include require, isset() unset(), empty(). 所以这些都不能用于可变函数。

empty()太笼统了,要尽量避免,要用 == 或 != 或 === !== 尽可能准确地、细致地判断变量的类型

isset(): 变量在内存中根本就没有, 没有定义; 或者显式地设置为null。

不再纠结xhtml

xhtml1.0 is A Reformulation of HTML 4 in XML 1.0

dtd就是关于元素定义的规则文件。通过查看dtd文件,可以看到dtd对 每个html元素和元素属性的规定,那么写xhtml的时候,

就要按这个规定来写...

如:

表示style样式和script脚本中的代码将会被解析器解析parsed character data.
表示img的类型为空元素: webexam项目杂记

不再纠结:用xhtml transitional

"http://www.w3.org/1991/xhtml1"和 PUBLIC "-//W3C//DTD XHMTL 1.0 Transtional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"

中的TR可以认为是: type reformulation类型重生成...

在上面的声明中,声明了文档的根元素是 html,它在公共标识符被定义为 “-//W3C//DTD XHTML 1.0 Strict//EN”(注意,中间的内容是两个斜线// 的 DTD 中进行了定义。浏览器将明白如何寻找匹配此公共标识符的 DTD。如果找不到,浏览器将使用公共标识符后面的 URL 作为寻找 DTD 的位置。

php ini_set('safe_mode',on):

安全模式的目的,是为了限制:php操作外部系统命令,如system(...),和限制一些对关键文件/目录的操作。

安全模式启用时,命令字符串会被 escapeshellcmd() 转换。因此, echo y | echo x 会变成 echo y | echo x

php是不允许用var来定义变量的,只要有$, 就表示一个变量的定义。 unexpected T_VAR ...(T_表示类型?T_OBJECT...)

虽然不能用var来定义变量,但是变量应该在使用前初始化。

使用utf-8来写页面,需要做到几个一致:

  • 为什么会产生中文乱码? 是因为中文在存储和解析时,gbk/gb2312和utf-8解析字节的个数不同。

  • 页面内要规定文件的字符集 header(".... ;charset=utf-8");<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 这个是告诉浏览器显示这个页面应该使用的字符集

  • 页面文件本身要保存为utf-8:DW中,在“修改”-> “页面属性”中查看修改或CTRl+J,然后保存/另存为

  • unicode(utf-8):utf-8是unicode的一种形式,两者不是一样的:utf-8是变长的,英文是1个字节,汉字是3个字节。bom是unicode的签名...

  • (注意服务引擎的干扰)apache服务器引擎的charset也要设为utf-8,或者不设,这样apache就只输出text/html,而不会设定字符集,而浏览器根据header或meta的说明来选择字符集

  • 但是,外部来的数据,如浏览器用户输入,或system("执行客户端系统命令"),添加到html/php页面的内容的编码,将取决于客户端操作系统自身的字符集,如xp的默认字符集是gb2312,win7的默认字符集是,这样在浏览器中即使用utf-8也会是乱码。

  • 破除误解:utf-8并不”兼容”gb2312! 用utf-8编码来显示gb2312编码的中文内容时,仍然会是乱码!

print out errors(as a part of output),会“搞糟”浏览器输出。you are strongly encouraged to turn this feature off.

生产性website建议用logs日志代替display_errors=on

iconv和mb_convert_encoding

a). 两个都是字符集编码转换,都要对应的dll实体文件和php扩展配置;extension=php_iconv.dll php_mbstring.dll

b). 从转换效率来看,iconv比mb_convert_encoding更快一些,为什么,因为后者会自动检测侦查字符串的编码。

c). 从兼容性来说,iconv没有后者好,iconv要把字符串先转换编码后,再icon_substr截取中文字符,而mb_substr直接截取安全

d). iconv有一个bug,就是中文"一"从utf8转换成gb2312会失败,所以这时可以用mb来转换,后者没有这个bug

e). iconv可以添加后缀//translit,//ignore,这会处理不能被转换的字符,否则,默认的是如果不能转换当前字符,则其后面所有的内容都会被截断。

e). 从函数来说,iconv(string in_charset, string *out_charset*, string *$str*), 三个参数都是必须的,而 mb_convert_encoding(string *$str*, string *out_charset* [, string *in_charset*]) .两者的参数顺序刚好相反,为什么呢?因为mb...的参数in_charset可以缺省,而缺省只能放在最后

f). 所以, (两者都开启的情况下),一般情况下用iconv, 当"转换出错,或者不知道原字符编码”时,用mb_convert_encoding

上一篇:为代码减负之<三>视图(SQL)


下一篇:Java中数据类型及其之间的转换