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 相关文章推荐
基于mysql的bbs设计(四)
Oct 09 PHP
php 日期时间处理函数小结
Dec 18 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
Apr 07 PHP
php和js如何通过json互相传递数据相关问题探讨
Feb 26 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
Jan 29 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
Mar 09 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
Aug 01 PHP
php检测mysql表是否存在的方法小结
Jul 20 PHP
laravel中短信发送验证码的实现方法
Apr 25 PHP
Thinkphp 5.0实现微信企业付款到零钱
Sep 30 PHP
php面试中关于面向对象的相关问题
Feb 13 PHP
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
Apr 01 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 生成文字png图片的代码
2011/04/17 PHP
使用php批量删除数据库下所有前缀为prefix_的表
2014/06/09 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
2015/09/22 PHP
利用javascript实现全部删或清空所选的操作
2014/05/27 Javascript
Nodejs Post请求报socket hang up错误的解决办法
2014/09/25 NodeJs
JavaScript中的Math.LN2属性用法详解
2015/06/12 Javascript
jQuery实现仿腾讯视频列表分页效果的方法
2015/08/07 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
angularjs ui-router中路由的二级嵌套
2017/03/10 Javascript
underscore之function_动力节点Java学院整理
2017/07/11 Javascript
Vue中之nextTick函数源码分析详解
2017/10/17 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
linux 后台运行node服务指令方法
2018/05/23 Javascript
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
2018/09/14 Javascript
react写一个select组件的实现代码
2019/04/03 Javascript
使用p5.js临摹动态图片
2019/11/04 Javascript
微信小程序基于movable-view实现滑动删除效果
2020/01/08 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
[03:55]TI9战队采访——TNC Predator
2019/08/22 DOTA
Python向Excel中插入图片的简单实现方法
2018/04/24 Python
TensorFlow的权值更新方法
2018/06/14 Python
python ChainMap 合并字典的实现步骤
2019/06/11 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
pytorch 更改预训练模型网络结构的方法
2019/08/19 Python
Python列表的切片实例讲解
2019/08/20 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2019/11/19 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
python可视化text()函数使用详解
2020/02/11 Python
详解Pycharm第三方库的安装及使用方法
2020/12/29 Python
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
工商学院毕业生个人自我评价
2013/09/19 职场文书
机械设计专业应届生求职信
2013/11/21 职场文书
校运动会广播稿300字
2014/10/07 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
培训通知书模板
2015/04/17 职场文书
Python Django项目和应用的创建详解
2021/11/27 Python