Welcome to IcyRiver'blog

Thursday, September 14, 2006

编程遇到的几个问题

真奇怪,今天编码遇到好几个问题,把重要的几个记下来吧:


1。首先看下面一段代码:

<A onclick=”javascript:window.location.href=’yahoo.com’ ” href=”sohu.com”>Click Me!</A>


浏览器会跳转到哪个页面?
FireFox和IE都会先执行页面JS脚本,然后浏览器再跳转到HREF指向的页面—sohu.com。如果把代码改成这样:


<A onclick=”javascript:window.location.href=’yahoo.com’ ” href=”#”>Click Me!</A>


FireFox和IE还是会先执行页面JS脚本,但由于HREF指向的页面是“#”,所以浏览器会跳转到yahoo.com


2。htmlspecialchars函数可以把引号等特殊字符转换成HTML entities, 如何从HTML entities
还原成相应的特殊字符呢?
PHP5提供了一个函数htmlspecialchars_decode,可以做到.在PHP4环境下,只能通过下面的方法完成转换:
$trans = get_html_translation_table(HTML_SPECIALCHARS);
$trans = array_flip($trans); //只是必须的,否则会产生乱码。
$text = strtr($text, $trans);


3。在构造http
GET请求的字符串时,如果没有把参数的值用urlencode函数进行处理,可能会产生字符编码的问题。例如我构造了这样一个请求,http:
//yahoo.com/somePage.php?p=$string&u=…,变量$string使用UTF8编码的,而页面是GBK编码。
当用户提交这样一个GET请求时,浏览器会把“p=”后面的字符按照GBK编码来处理,后果是可能会把$string的最后一个字符和紧跟着的字符
&结合,而产生混乱的字符。


用urlencode处理$string字符串后,页面上的http GET请求链接就不会有问题。唯一遗憾的是,浏览器在发送请求时,会再一次把参数p的值作一次URI编码处理。服务器端接受到参数p的值后,还得用urldecode函数对字符串进行解码。

0 Comments:

Post a Comment

<< Home