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

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


例 52-1. 隐藏的 HTML 表单元素 <?php    echo "<input type=hidden value=\"" . htmlspecialchars($data) . "\">\n";?>
注意: 这里不能用urlencode() $data, 因为 urlencode() 数据是浏览器的责任. 绝大多数浏览器可以正确处理这样的数据. 无论用何种方法( GET POST). 你可以只考虑 GET 请求, 因为 POST 请求通常被隐藏了.
例 52-2. 用户编辑数据 <?php    echo "<textarea name=mydata>\n";    echo htmlspecialchars($data)."\n";    echo "</textarea>";?>
注意: 在浏览器窗口显示的数据会被解码成可读的,因为浏览器会对 HTML 标记进行解释.
一旦提交, 无论GET 还是 POST, 浏览器在传输数据时会进行URL编码,PHP则会对它进行解码. 一切都是自动进行的,你不需要做什么.
例 52-3. 在URL串里 <?php    echo "<a href=\"" . 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. 我在用 <input type="image"> 标记, 但 $foo.x and $foo.y 变量却不可用. 它们在哪里?
在提交一个表单里, 可能使用一个 image 控件而不是使用 标准的提交按钮: <input type="image" src="image.gif" name="foo">When 当用户点上 image 控件的某个地方时, 表单被提交到服务器,并有两个附加的变量: foo.x and foo.y.
因为 $foo.x 和 $foo.y 在 PHP 里是无效的变量名, 所以它们自动被转换成$foo_x and $foo_y. 也就是说, 圆点被替换成了下划线.
3. 我怎样创建 HTML <form>数组?
为了使你的表单结果作为数组送往PHP脚本,你可以给 <input>, <select> or <textarea> 元素象下面这样取名: <input name="MyArray[]"><input name="MyArray[]"><input name="MyArray[]"><input name="MyArray[]">注意元素名后面的中括号不能省, 就是它使结果成为一个数组. 你可以通过元素名把它们排成不同的数组 : <input name="MyArray[]"><input name="MyArray[]"><input name="MyOtherArray[]"><input name="MyOtherArray[]">上面的代码产生了两个数组, MyArray 和 MyOtherArray, 送往PHP. 当然也可以为你的数组指明键值: <input name="AnotherArray[]"><input name="AnotherArray[]"><input name="AnotherArray[email]"><input name="AnotherArray[phone]">AnotherArray 数组会容纳下标 0, 1, email and phone.

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

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

PHP 和 HTML的更多相关文章

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP实现文件安全下载

    例如你希望客户要填完一份表格,才可以下载某一文件,你第一个想法一定是用"Redirect"的方法,先检查表格是否已经填写完毕和完整,然后就将网址指到该文件,这样客户才能下载,但如果你想做一个关于"网上购物"的电子商务网站,考虑安全问题,你不想用户直接复制网址下载该文件,笔者建议你使用PHP直接读取该实际文件然后下载的方法去做。feof){echofread;}fclose;}这样就可以用PHP直接输出文件了。

  3. PHP默认安装产生系统漏洞

    当你下载PHP後,在它内含的安装文件中帮助了PHP在NTApacheWebServer的安装方式,其中的安装帮助会要你将底下这几行设置加到apache的httpd.conf设置文件中,而这个安装文件将导引你将你的系统门户大开。

  4. 怎样在UNIX系统下安装php3

    #cd/usr/src#tarxvzfapache_1.3.6.tar.gz(产生apache_1.3.6目录)#tarxvzfphp-3.0.8.tar.gz(产生php-3.0.8目录)#cdapache_1.3.6#./configure--prefix=/usr/local/apache(把Apache的安装目录定为/usr/local/apache)#cdphp-3.0.8#./conf

  5. ftp类(example.php)

    flush();$ftp_ini_datei=$argv[1];require('./ftp_class.php');require($ftp_ini_datei);echo"\nCronjobstarted:";echodate("d.m.Y-H:i:s");echo"\n";$newftp=newmyftp;if(!$anonymous){$result=$newftp->connect($host,$user,$password);}else{$result=$newftp->connect($ho

  6. PHP分页显示制作详细讲解

    搞定了最重要的如何获取数据的问题以后,剩下的就仅仅是传递参数,构造合适的sql语句然后使用php从数据库内获取数据并显示了。

  7. Apache2的httpd.conf翻译

    ##这是Apache服务器主要配置文件。#参见以取得关于这些指令的详细信息##不要只是简单的阅读这些指令信息而不去理解它。#这里只是做了简单的说明,如果你没有参考在线文件,你就会被警告。

  8. PHP中GET变量的使用

    自PHP4.1.0以后将HTTP_GET_VARS使用GET变量来保存,GET的变量主要来自以下的方法对服务器以获取资料信息为请求方法的例如,URL,使用FORM的METHOD为GET方式。这样所有的请求变量将通过URL传递给服务器,服务器根据配置调用相关的解释器来处理这些GET出来的变量。arg_separator.input=";,"————二、自己编写解释语法list=$_GET;//将GET变量分解出来$tmp=explode;//将数据分出这个用法的优点在于,别人无法知道您传递的值是被谁使用,您

  9. PHP 高手之路(三)

    但是在PHP中数据库的运行仍然是一件十分费时费力的事情,所以,作为一个Web程序员,要尽量减少数据库的查询操作,同时应该为数据库建立适当的索引。另一件值得注意的事情是在用PHP操作数据库时,尽可能不使用多个数据表的联合操作,尽管联合操作可以增强数据库的查询功能,但是却大大增加了服务器的负担。

  10. PHP 脚本:随心所欲的代码逐渐流行

    有些人认为PHP代表“个人主页”。有些人认为PHP是其发明者姓名的首字母缩写。他公开发布了最初的超文本预处理器源代码,以帮助其它的Web开发人员对在线内容执行类似的操作。由于PHP的入门级这一特性,一个开放源代码社区围绕着该语言成长起来,以帮助PHP开发变得更加简单。所有这些结果表明在最近3年里PHP的使用得到了爆炸性的增长。

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部