zl程序教程

您现在的位置是:首页 >  后端

当前栏目

PHP和HTML

2023-06-13 09:13:43 时间
PHP和HTML
PHP和HTML可以互操作:PHP能够生成HTML,而HTML可以传递信息给PHP.1.我用一个form/URL传值时,我要怎样编码/解码?2.我在用<inputtype="image">标记,但$foo.xand$foo.y变量却不可用.它们在哪里?3.我怎样创建HTML<form>数组?4.我怎样从一个多选框得到所有的结果值?
1.我用一个form/URL传值时,我要怎样编码/解码?
在几个阶段里,编码是非常重要的.假设你有一个字符串变量$data,它包含一些你要以未编码方式传递的字符,要经过下面阶段的编码:

HTML解释.为了表示任何一个字符串,你必须把它包含在双引号里,而且是HTML特殊字符的要使用htmlspecialchars写法.
URL:URL由几部分组成.你想你的数据被看成URL的一部分,你必须用urlencode()编码它.


例52-1.隐藏的HTML表单元素 <?php    echo"<inputtype=hiddenvalue=\"".htmlspecialchars($data)."\">\n";?>
注意:这里不能用urlencode()$data,因为urlencode()数据是浏览器的责任.绝大多数浏览器可以正确处理这样的数据.无论用何种方法(GETPOST).你可以只考虑GET请求,因为POST请求通常被隐藏了.
例52-2.用户编辑数据 <?php    echo"<textareaname=mydata>\n";    echohtmlspecialchars($data)."\n";    echo"</textarea>";?>
注意:在浏览器窗口显示的数据会被解码成可读的,因为浏览器会对HTML标记进行解释.
一旦提交,无论GET还是POST,浏览器在传输数据时会进行URL编码,PHP则会对它进行解码.一切都是自动进行的,你不需要做什么.
例52-3.在URL串里 <?php    echo"<ahref=\"".htmlspecialchars("/nextpage.php?stage=23&data=".        urlencode($data))."\">\n";?>
注意:实际上你在自己写一个GET请求,所以用urlencode()对它进行编码就是不可缺少的.
注意:你需要htmlspecialchars()整个URL串,因为URL串是HTML-属性的一部分.这种情况下,浏览器首先反-htmlspecialchars()这个值,然后送出URL.PHP会识别这个URL串,因为你用urlencoded()对它进行了编码.
你会发现&在URL串中被替换成&.虽然你没有编码大部分的浏览器也会帮你做,但并不是所有的都能.所以即使你在写一个静态的URL,你也需要用htmlspecialchars()来对URL进行编码.

2.我在用<inputtype="image">标记,但$foo.xand$foo.y变量却不可用.它们在哪里?
在提交一个表单里,可能使用一个image控件而不是使用标准的提交按钮: <inputtype="image"src="image.gif"name="foo">When当用户点上image控件的某个地方时,表单被提交到服务器,并有两个附加的变量:foo.xandfoo.y.
因为$foo.x和$foo.y在PHP里是无效的变量名,所以它们自动被转换成$foo_xand$foo_y.也就是说,圆点被替换成了下划线.
3.我怎样创建HTML<form>数组?
为了使你的表单结果作为数组送往PHP脚本,你可以给<input>,<select>or<textarea>元素象下面这样取名: <inputname="MyArray[]"><inputname="MyArray[]"><inputname="MyArray[]"><inputname="MyArray[]">注意元素名后面的中括号不能省,就是它使结果成为一个数组.你可以通过元素名把它们排成不同的数组: <inputname="MyArray[]"><inputname="MyArray[]"><inputname="MyOtherArray[]"><inputname="MyOtherArray[]">上面的代码产生了两个数组,MyArray和MyOtherArray,送往PHP.当然也可以为你的数组指明键值: <inputname="AnotherArray[]"><inputname="AnotherArray[]"><inputname="AnotherArray[email]"><inputname="AnotherArray[phone]">AnotherArray数组会容纳下标0,1,emailandphone.

说明:在元素名里标明下标值是可选的.如果你没有标明,数组会按元素在表单里出现的顺序来依次填充.如我们的头一个例子里数组的下标分别是:0,1,2and3.

参见Array函数andPHP外部变量.
4.我怎样从一个多选框得到所有的结果值?
HTML里的多选框是用来让用户从列表里选多个值的.这些值然后被送往表单的处理脚本.问题在于它们都有同样的变量名.例如: <selectname="var"multiple>每一个被选择的项会这样传值给处理脚本: var=option1var=option2var=option3每个值覆盖了前一项的值.$var解决办法是使用PHP的"表单元素数组"特性.下面就是: <selectname="var[]"multiple>PHP会把$var当成一个数组.每个被选择项都会分配给一个数组单元.第一项是$var[0],下一项是$var[1],依此类推.count()函数可以用来判断数组有多少选择项,如果有必要的话,还可以用sort()函数来对数组进行排序.
如果你在使用JavaScript,直接使用元素名引用可能会出错.你应该使用它的数字索引,或者把变量名放在单引号之内.例如: variable=documents.forms[0].elements["var[]"];