jQuery+javascript +php构建网页代理网站

初看会觉得很疯狂,但是这的确能很简单的实现,只是里面的原理比较费脑子,尤其是解决如何在一个已经代理中的网页中点击其中链接使其仍然被网站代理而不会出现跳转以及错误(绝对链接和相对链接导致的错误)是非常棘手的。

首先我们知道一些网站比如facebook youtube twitter 在国内是被封锁的,那如何不通过VPN访问呢?只有一个办法,网页代理。网页代理原理是由放在外国的服务器替你抓取那些你想访问的网站然后显示出来,这样你就间接地访问了那些网站。
  我现在把这个业务逻辑由浅往深讲。
  首先我们先弄明白如何抓取一个网页。
PHP代码如下:

[php]
<?
// 初始化一个 cURL 对象
$curl = curl_init();

// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_URL, $url);

// 设置header
//curl_setopt($curl, CURLOPT_HEADER, 1);

// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
//curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

// 运行cURL,请求网页
$data = curl_exec($curl);

// 关闭URL请求
curl_close($curl);

// 显示获得的数据

var_dump($data);}
[/php]
那好,我们把这段程序运行在国外服务器上,然后把$url 改成你想访问的网站,那么你就可以看到被封锁的网站了。

可是,有没有发现每次访问其它网页你都要更改$url参数很麻烦,那我们不修改源代码,设置一个表单提交你要访问的网址,如果没有输入或者输入错误直接转到一个特定的网址,这里我们设置为百度。这样就稍微好一点,现在放上新的代码
[php]
<?php
if((isset($_GET[‘url’]))&&($_GET[‘url’]!=”")){
$url=$_GET[‘url’];}
else {
$url=”http://www.baidu.com”;
?>
<form method=”GET” action=”index.php” >
<input type=”text” name=”url”/>
<input type=”submit” value=”转到”>
</form>
<?
}
// 初始化一个 cURL 对象
$curl = curl_init();

// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_URL, $url);

// 设置header
//curl_setopt($curl, CURLOPT_HEADER, 1);

// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
//curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

// 运行cURL,请求网页
$data = curl_exec($curl);

// 关闭URL请求
curl_close($curl);

// 显示获得的数据
var_dump($data);
[/php]
但是,这样修改也是极其麻烦,带来很不好的用户体验,我们希望能以一种无阻隔和不用代理一样的一种方式来上网,于是我们便开始修改目前所代理的网页,使其所有链接均呈现以下一种状态:
1.所有的链接均为http://localhost/index.php?url=XX(localhost 为服务器网址 XXX 为网页上原本的地址)
这一点很好办,用jquery.each()循环放上代码
[html]
$(document).ready(function(){
$(‘a’).each(function(index)
{
var href=”http://localhost/?url=http://”+$(this).attr(“href”);

})
$(this).attr(“href”,href); })
[/html]

关于Apache默认编码错误,导致网站乱码的解决方案

最近经常有同学在使用LAMP/WAMP时,遇到这样的编码错误问题:

A网站程序编码UTF-8编码安装成功,运行成功。

B网站程序编gb2312也要安装在同一服务器上。

这样就出现问题了,Apache默认编码UTF-8在解析A网站的时候没有任何问题,当运行B网站时出现的”蝌蚪文”乱码问题。

单纯的修改Apache默认编码为gb2312这样就导致A网站出现”蝌蚪文”。

问题分析:

如果你在网上搜索 “apache配置”,搜到的页面大多都会建议你在httpd.conf中加上这么一句:AddDefaultCharset GB2312。

对于新手而且是只用GB2312编码的开发人来说,这么做是ok的。但是如果要想使用UTF-8字符集的话,比如 在test.php文件中需要有 meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ 这段代码。

这时你再打开浏览器访问test.php页面的话,你看到的是正确的页面。但是如果实际上浏览器还是以GB2312编码解释从服务器返回的response,为什么呢?原因是浏览器是根据http应答消息头部中的 Content-type: text/html; charset=GB2312 来决定使用何种编码解释应答,也就是说apache服务器仍然用GB2312编码传递数据。

所以说如果apache的默认字符集被设置成了GB2312,即使在页面中声明使用UTF-8编码,apache服务器还是会按照GB2312编码来传送http response。没关系,我们把AddDefaultCharset GB2312 改成 AddDefaultCharset UTF-8,看看什么结果?

如果你看到乱码恭喜你,你还知道是乱码问题;如果你看到是空白页面,那么你就惨了,你可能会以为这是其他什么原因造成的,而不会从编码的角度去考虑怎么解决问题。这是为什么?原因在于php文件本身是用系统字符集来编码的,中文的windows XP都是用GB2312,每一个文件头部都有字段指示该文件是用何种方式编码的。当apache接到浏览器的请求后,会让php去解释所请求的页面,比如 test.php。php会识别出test.php的编码方式是GB2312后(就像我们用javac编译java源文件时,编译器默认用系统编码读源文件里的内容。

如果源文件不是用系统编码来保存的,可以用命令javac -encoding指定具体的编码),把数据以GB2312的编码格式传递给apache,而apache服务器不会改变从php传来的数据,只是在应答消息头部中把字符集设置成UTF-8: Content-type: text/html; charset=UTF-8. 也就是说你传递的是GB2312编码的数据,而浏览器却以UTF-8编码来解释应答消息。

由于UTF-8为3个字节表示一个汉子,而普通的GB2312或BIG5是两个。页面输出时,由于上述原因,出现半个汉字的情况,这时该半个汉字会和的>结合成一个乱码字,导致IE无法读完的话,会发现实际上整个叶面全部已经输出了。如果使用的是Mozilla、Mozilla Firefox、Sarafi的浏览器这不会造成这个问题,而是一堆乱码。这是由于Firefox浏览器和IE解析网页编码的策略不同产生的。OK,我们把test.php以UTF-8保存,再用浏览器访问时,就没有问题了。

可这样做,会使得apache目录下的所有web应用只能用同一种编码。如何搞定?

解决办法:

首先,可以使用AddDefaultCharset off来关闭默认文件编码,这样apache服务器就不会在http应答消息头部设置charset,只是设置Content-type: text/html. 而浏览器就会依靠html文件中设置的harset来决定编码。

其次,脚本php.ini文件中的default_charset = “UTF-8″作用同httpd.conf文件,把该行注释掉,使php自动识别文件的编码方式。

这样不论你用什么编码方式,只要test.php中的meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ 与你test.php文件编码方式相同,就不会产生乱码问题。用户提交数据的编码浏览器提交的字符编码由客户端的characher encoding决定。

例如,当前浏览器的编码是Gb2312,用户提交数据后,无论apache设置的编码方式是GB2312还是UTF-8,这时在服务器端接收到的仍是以Gb2312编码的数据。

如果要在返回页面上显示用户刚才提交的数据,而该页面是用UTF-8编码的或者要在数据库中存储的用户提交的数据,而数据库是UTF-8编码的,那就要做字符转换了。

 

转载自:http://www.cnblogs.com/wendywu/archive/2011/12/06/2278537.html

HTML5 canvas 元素学习笔记

此元素是定义图形的标签。
目前这个元素只能在谷歌浏览器、火狐浏览器、safari浏览器正常显示,据说IE9也支持,但是我没有看到它在我的IE中显示出来。
目前HTML5是比较新的一种标准,学习时一般要读英文文档,所以进度比较慢,我先写一部分。后面更新。。
在网页中作图要有javascript语言基础
HTML文档










下面全是javascript 代码:

HTML5与CSS3

现在HTML5 CSS3 炒的很热,最为目前最前沿的技术,我关注了一些技术细节,发现HTML5很强大并神奇地出现了接口,有望成为一门编程语言。

HTML 5有两大特点:首先,强化了 Web 网页的表现性能。其次,追加了本地数据库等 Web 应用的功能。一些其它技术细节没来得及研究。

CSS3在国内的发展状况不是很理想,今年4月份才有了第一本介绍该技术的书,我看了下英文开发文档,新增了一些选择符和结构伪类,让我谈它的优点我只能很浅显的说:在一些圆角设计和页面控制方面更简洁。当然它的应用有很多,我所了解的也是很浅显,,毕竟英文水平有待提高。

扯一条不挨题的话,学好英语很重要,平时有一些技术问题我都是看英文的解决方案。

附上一个链接讲了HTML5的书写格式。http://net.tutsplus.com/tutorials/html-css-techniques/25-html5-features-tips-and-techniques-you-must-know/

 

 

PHP在Mysql数据库中查询的方法

每种方式都有两种方法:1.过程方法 2.面向对象的方法

在使用面向对象连接数据库时要用


而使用过程方法连接数据库时


在查询时有以下几种方法,在此不再特别标明是过程方法还是面向对象

num_rows;//$num_results=mysqli_num_rows($result)
//查询返回的每一行数据,这里一般用循环结构
//每行返回一个数组,每个关键词为一个属性名 通过 $row['字段名']调用
$row=$result->fetch_assoc();//$row=mysqli_fetch_assoc($result);
//每行返回一个列举数组  可以通过row[0],row[1]等等调用
$row=$result->fetch_row();//$row=mysqli_fetch_row($result); $row=mysqli_fetch_arry($result);
//返回一行到一个对象中 用法$row->字段名
$row=$result->fetch_object();//$row=mysqli_fetch_object($result);

?>