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的类型为空元素:
不再纠结:用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