PHP 和 HTML


Posted in PHP onOctober 09, 2006

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 相关文章推荐
PHP连接access数据库
Mar 27 PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 PHP
php中利用post传递字符串重定向的实现代码
Apr 21 PHP
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
Jul 05 PHP
迅速确定php多维数组的深度的方法
Jan 07 PHP
PHP生成网站桌面快捷方式代码分享
Oct 11 PHP
javascript+php实现根据用户时区显示当地时间的方法
Mar 11 PHP
PHP图像裁剪缩略裁切类源码及使用方法
Jan 07 PHP
YII框架中搜索分页jQuery写法详解
Dec 19 PHP
php获取指定数量随机字符串的方法
Feb 06 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
Feb 09 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
May 29 PHP
数据库相关问题
Oct 09 #PHP
编译问题
Oct 09 #PHP
PHP 和 COM
Oct 09 #PHP
如何获得PHP相关资料
Oct 09 #PHP
VML绘图板②脚本--VMLgraph.js、XMLtool.js
Oct 09 #PHP
example1.php
Oct 09 #PHP
一个ftp类(ini.php)
Oct 09 #PHP
You might like
php 字符串替换的方法
2012/01/10 PHP
解析dedeCMS验证码的实现代码
2013/06/07 PHP
Zend Framework框架实现类似Google搜索分页效果
2016/11/25 PHP
PHP基于自增数据如何生成不重复的随机数示例
2017/05/19 PHP
详解使用php-cs-fixer格式化代码
2020/09/16 PHP
javascript编程起步(第一课)
2007/01/10 Javascript
EXT中xtype的含义分析
2010/01/07 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
2012/08/14 Javascript
js网页版计算器的简单实现
2013/07/02 Javascript
网页右下角弹出窗体实现代码
2014/06/05 Javascript
javascript数组输出的两种方式
2015/01/13 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
2016/05/17 Javascript
React组件的三种写法总结
2017/01/12 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
2017/10/11 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
解决VUE双向绑定失效的问题
2019/10/29 Javascript
vue 组件内获取actions的response方式
2019/11/08 Javascript
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
使用Vue实现简单计算器
2020/02/25 Javascript
详解JavaScript自定义函数
2020/07/29 Javascript
Python实现多并发访问网站功能示例
2017/06/19 Python
Python3.4实现远程控制电脑开关机
2018/02/22 Python
pandas把dataframe转成Series,改变列中值的类型方法
2018/04/10 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
Python日志无延迟实时写入的示例
2019/07/11 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
特步官方商城:Xtep
2017/03/21 全球购物
高中学生期末评语
2014/04/25 职场文书
信访维稳工作汇报
2014/10/27 职场文书
护士个人年度总结范文
2015/02/13 职场文书
详解在OpenCV中如何使用图像像素
2022/03/03 Python