Posts Tagged ‘题的’

定义标题的最好方法

星期三, 06月 4th, 2008

作者:阿宏 2005-4-15 20:45:18
原文:What is the Best Way to Mark up the Title of a Document?
说明:本文是 《Web Standards Solutions: The Markup and Style Handbook》一书中de一章.书号:ISBN:1590593812.我会陆续翻译此书中有价值de章节.
原作者:Dan Cederholm
翻译:阿宏
一个文档标题,最好de定义方法是什么?要回答这个问题,先设想我要在一个页面上定义文章de标题,通常我有三个方法来实现这个简单目de:

方法一: 有意义吗?
<span class=”heading”>文章标题</span>
虽然在某些情况下<span>会是一个方便de标签,但它并不能表达出标题de完整含义.采用这个方法de一个好处是,我可以对它附加一个CSS规则,分配其一个heading class,使其文字象标题一样显示.

.heading {
font-size: 24px;
font-weight: bold;
color: blue;
}
ok,现在所有de标题都用heading class标记成了大号de粗体字体,并且为蓝色.太棒了!但是这样做对吗?如果有人用一个不支持CSSde浏览器来观看,会怎样呢?

举个例子,如果我设置de这个外部样式表de规则不被老版本de浏览器支持,会怎样?又或者有视觉障碍de人用屏幕阅读器来阅读这个页面,又会怎样?一个访问者通过这些途径所看到(或听到)de应该和这个页面上正常de文本没有任何区别.

尽管class=”heading”为这个标签增加了一点意义,但<span>仍然只是一个普通de标签,可以被大多数浏览器de缺省样式所修改掉.

搜索引擎检索这个页面时会略过<span>标签,就好象它不存在一样,不会对其可能包含de关键字给于一点额外de重视.在后面我会更多de谈到搜索引擎和标题de关系.

最后,由于<span>标签是一个内嵌元素,我可能需要把它嵌套在一个额外de块级元素中,比如<p>标签或<div>标签,为de是使它能够形成单独de行,这会进一步被非必要de相关代码弄乱您de标签.而这些额外增加de标签却是必须de,这样才能使不支持CSSde浏览器显示出没有差别de文本.

方法二:<p>和<b>组合
<p><b>文章标题</b></p>
使用一个段落标签,将会给我带来块级de显示,<b>会把文本变成粗体.但是用这个方法标记一个重要de标题时,我面对de是同样无意义de结果.

不象方法A,<b>标签能在可视化de浏览器中把文字显示成粗体——甚至在不支持CSSde浏览器中.但是和<span>标签一样,搜索引擎也不会因为有一些东西在段落中被加粗了而给予更高de优先.

难以设计样式

用普通de<p>和<b>de组合,也带来了另一个缺憾——无法把这个标题设计成不同于其他段落de样式.我可能想用一个特别de样式来突出标题,来使页面内容更清晰更具结构,但是用这个方法只能使其显示成粗体.

方法三:样式加实质
<h1>文章标题</h1>
恩,多么好de标题定义.大多数de网页设计者对它都很熟悉.其实适当de使用它们,<Hn> 就能为页面内容提供灵活de、可索引de、以及可样式化de结构.

这也是聪明de定义方法,您会发现它很简单.不再需要额外de标签,您可以说,这仅仅比另外两个方法节省了一点点de字节,可以忽略不计,但节省一点是一点.

<h1>一直到<h6>,代表了标题de六个级别,从最重要de(<h1>)到最次要de(<h6>).他们本身就是块级de,不需要增加其它元素来使其单独成行.简单,有效——就是好工具.

轻松定制样式

因为我使用<h1>标签是唯一de,而<b>或<p>标签更适合使用在整个页面,所以我可以用各种各样deCSS方法来样式化.

更重要de是,尽管完全不用样式,一个标题标签也能明显de表示出一个标题!可视化de浏览器把 <h1>显示成更大de粗体.一个非样式化de页面将以被期望de那样显示文档结构,用适当de标题标签来传达意思.

屏幕阅读器、PDA、手机、以及可视化de和非可视化de浏览器都会明白,碰到一个标题标签时该做de事情,正确de处理,比页面上de普通文本更重视de来对待.而使用<span>标签,那些不支持CSSde浏览器就不会特别de对待它.

讨厌de默认样式

以往,由于浏览器默认de缺省值非常de丑陋,设计者们也许会避免完全de使用标题标签.或者,因为缺省值de巨大尺寸而避免使用<h1>或<h2>,取而代之de是用更高数值de标题标签来实现更小de尺寸.

然而,需要重点强调de是,我可以很简单de用CSS来改变这些标题标签——举个例子,一个< ;h1>并非一定是占满大半屏幕de巨大标版.在后面,我将证明用CSS来样式化标题标签是多么de简单,希望可以帮助您减轻巨大de恐惧.

对搜索引擎友好de

这是一个巨大de好处.搜索引擎喜欢标题标签.另一方面,一个<span>标签或者普通de加粗de段落标签却在意味着次要一点.适当de用<h1>到<h6>标记您de标题,只需要您de一点点努力,然而却让搜索引擎更容易de检索到您de页面,让人们最终能找到它们.

搜索引擎机器人会给予标题标签特别de关注——这是您可能放置一些关键词de地方.就象检索到 <title>和<meta>,它们会顺着标题标签往页面下面查找.如果您不使用这些标签,那么包含在里面de关键词将不会被认为是有价值de,从而被忽略掉.

所以只要付出一点点de努力,您就能增加人们基于页面de内容找到您de站点de可能性.听上去不错,不是吗?

关于标题de次序
在例子中,这个特别de标题是页面中最重要de,因为它是文档de标题.因此,我使用最重要de标题标签,<h1>.顺应W3Cde规范,一些人认为跳过数个标题级是个不好de使用.举个例子,想象我在下面de页面:

<h1>文章标题</h1>
我接下去de标题(如果不是用另一个<h1>重复de话)应该是<h2>,然后是<h3 >,等等.您也许不应该在<h1>后面跳过一级,直接跟上<h3>.我倾向于同意以上de观点,顺着行文保持级别de连续性,来构造一个排版结构.这样de话,给一个已经存在de页面添加标题和样式就更容易了,您会减少因使用超出de数字而导致de错误.

前面提到de,设计者也许会用<h4>来标签一个页面上最重要de标题,仅仅是因为它de缺省de字体尺寸不象<h1>那样令人生厌de巨大.但是记住,先结构,后设计.我总是能用CSS来把标题样式化成任何我喜欢de文字尺寸.

关于JSP中文问题的解决方法

星期一, 06月 2nd, 2008

在jsp中,中文乱码常会让人心乱如麻.
  对于中文处理de常见对策,在网上经常可见de主要是下面2种:
<%@ page
contentType="text/html;charset=gb2312" %>
  或者:
<%
String Hi="您好";
byte[]
tmpbyte=Hi.getBytes("ISO8859_1");
Hi=new
String(tmpbyte);
out.print(Hi);
%>
  虚拟小龙亭也主要采用了上面2种方法进行了修改,从而变成了1.1版.
  通过简单总结,示例中de中文处理发生于以下几个地方:
  1 在url附带中文参数,可以直接读取.

  例如:
<%= request.getParameter("showword")%>
  2 与数据库有关de各种sql操作
  这里使用deAccess没有发生问题.

  3 读取HTML
  form表单中递交de中文值
  在jswdk中需要加以编码,较为简洁de写法如:

String name1=new
String(request.getParameter("user_id").getBytes("ISO8859_1"));
  另外,在jdk1.3de支持下,不需要加入
<%@
page contentType="text/html;charset=gb2312"
%>
  而在jdk1.2.2下面,即使2种方法同时运用也很不稳定.
  而在resin平台,情况较好.只要在页面第一行加入:
<%@
page contentType="text/html;charset=gb2312"
%>
  即可正确处理中文.
  如果再加编码则反而不对.
  5 session中包含de中文
  在jswdk中,奇怪de是如果从form中读出de值经过编码则可正确显示;
但直接赋予中文值则不行.
  resin平台很好,同上.
  6 对于对变量赋中文值后正确显示中文.
  例如以下程序:
<%@ page contentType="text/html;charset=gb2312"
%>
<html><head></head><body>
<%
String
Hi="您好";
byte[] tmpbyte=Hi.getBytes("ISO8859_1");
Hi=new
String(tmpbyte);
out.print(Hi);
%>
</body></html>
  同样是jswdk1.0.1,以上de表示方法在jdk1.2.2中没有问题,但在jdk1.3下却无法显示.
  resin平台很好,同上,经过测试,只需要在<head>中补上
<meta
http-equiv="Content-Type" content="text/html;
charset=gb2312">
而不需要<%@ page
contentType="text/html;charset=gb2312" %>也能正确显示中文.
  体会:
  jswdk也许只能用于普通开发,稳定性和其它问题可能不如商业软件.
由于jdk1.3版性能要好于jdk1.2.2很多倍,并且对中文de支持也较好,所以应该加以采用.
  作为免费de商业软件,resin不仅速度快,稳定,自动编译,可指出出错行,可在服务器端支持使用javascript等,而且,至少我觉得对中文de支持很好.
  当然,如果不必做任何处理即可正确显示中文将是我所期待de.
  另外,相信在unix/linux/solaris下应该没有这样de问题.

JSP显示中文问题的解决方案

星期一, 06月 2nd, 2008

这两天在win98下装apache1.3.9加jserv和gnujsp1.0,jdk1.2.2,jsdk2.0
发现中文无法正常显示.要么乱码,要么出错.
经网友提醒,总结了以下几条方法.
1:修改区域设置:在控制面版中选择区域设置,设为英语(美国)?nbsp;
然后重起.一切就都正常.
2:在jsp页中加入一条语句:
<%@ page contentType="text/html;charset=gb2312" %> ?
琷sp显示就正常了.
3:在编译servlet和jsp时加入相关代码选项.编译servlet使用
javac -encoding iso8859_1 myservlet.java
在jspdezone配置文件中.修改编译参数为:
compiler=builtin-javac -encoding ISO8859_1
使用这种方法后,不需要作其他de改动就可以正常显示中文了.
4:最土de办法,在servlet源程序中加入相关代码变换语句.如
try{
out.println(new ( (new String("我爱死您了")).getBytes("GBK"),"ISO8859_1"))
}
catch( UnsupportedEncodingException e)
{
…….
}
使用这种方法一定要注意捕获UnsupportedEncodingException

PHP4与PHP3中一个不兼容问题的解决方法

星期一, 06月 2nd, 2008

PHP4与PHP3中有些不兼容de地方,但这主要是PHP4中dePHP.ini
中de设置有些不同de地方,这些改变主要是提高PHP4de效率.
其中de改变中,track_vars de设置通常会是使旧dePHP3程序不能
再运行了,因为在PHP4de扩展设置中把track_vars de值设为了off
这样旧dePHP3程序中就不能直接用GET,POST,COOKIE从上页传送过来
de变量了.
我这里有一个简单de解决de方法,不用把track_vars de是设为on,
不过这只是一个权宜办法,以后大家还是用$HTTP_GET_VARS,
$HTTP_POST_VARS and $HTTP_COOKIE_VARS读取这些变量比较好.
下面是一个简单de程序,大家可以加到每个需要读取GET,POST,COOKIE
de变量de页前,就可以直接引用这些变量了.
get.variable.inc.php
<?
if(isset($HTTP_POST_VARS))
{
while ( list( $key, $val ) = each( $HTTP_POST_VARS ) )
{
$$key = $val;
}
}
if(isset($HTTP_GET_VARS))
{
while ( list( $key, $val ) = each( $HTTP_GET_VARS ) )
{
$$key = $val;
}
}

if(isset($HTTP_COOKIE_VARS))
{
while ( list( $key, $val ) = each( $HTTP_COOKIE_VARS ) )
{
$$key = $val;
}
}
?>
请大家多多指教!

PHP中路径问题的解决方案

星期一, 06月 2nd, 2008

PHP中路径问题de解决方案

引言:
关于PERL与PHP中de包含路径一直是一个比较难解de问题,主要是与操作系统和WEB服务器有关,不可能非常智能化de解决这个路径问题.相对于PERL,PHPde路径好得多,解决起来也容易得多,因为PHPde相对路径在PHP程序中de任何场合都可以使用,而不象PERL在某些语句中必须用绝对路径而导致移植de极其复杂.
基于此,在PHP中,我设计了一个绝对稳妥de解决方案,如下所述.
原则:
使用相对路径,但在相对路径中用绝对路径(有点绕,待会儿详解),一是可以保证可移植性,二是可以方便地修改,三是公式化且结构清晰明了,易于扩展.
步骤详解:
1、先确定好一个程序de根目录,注意是文件系统下de,不是WEB服务器下de虚拟目录,不过一般情况下该目录下de子目录de相对路径与URL下该目录de虚拟子目录是相同de.
2、在定义好de程序根目录下de每个子目录下(其实不一定是每个,根据需要)建立一个settings.php,里面定义一个变量或是常数(常数比较好,因为作用域比较大),如APPROOT,但这个APPROOT却不是绝对路径,而是该目录相对于您指定de程序根目录de相对路径.
3、在此目录下de所有程序入口文件(也即第一个包含其它文件de文件,或是允许直接在浏览器中浏览de文件)中第一句写上require_once(’settings.php’);,但要注意,所有被包含文件最好不要加此句——其实加上也可以,因为您可以在settings.php中写上 if(!defined(APPROOT)) define(APPROOT, ‘../..’);这类de语句以防重定义.
4、如果您要包含其它文件,无论是直接还是间接地包含,都可以写成 include(APPROOT.$path);,这里$path为被包含文件相对于您所指定de程序根目录de绝对路径.
原理:
定下de程序根目录是相对路径,但具体de目录位置是相对于那个根目录de绝对路径,两者组合起来就是具体文件相对于程序根目录de相对路径了.例如目录c:\wwwroot\app为您指定de程序根目录,然后有这么两个文件c:\wwwroot\app\a\index.php和c:\wwwroot\app\b\inc.php.对子目录a来说,APPROOT是’..’,而对程序根目录来说,inc.phpde绝对路径是$path=’/b/inc.php’,两者组合为’../b/inc.php’.如果要在index.php中包含inc.php就要写成include(’../b/inc.php’);,而这个路径不就正好是刚才组合而成deAPPROOT.$path吗?

结论:
经过以上处理,各个路径绝对整齐划一,唯一罗嗦一点de就是每个目录下要定义一下这个APPROOT,但每个目录下只需在本目录desettings.php中定义一次就足够了.如果您整个程序只有一个入口文件,如index.php,而其它文件全部都是直接或是间接地被包含进这个唯一de入口文件de话,就只需在index.phpde所在目录下desettings.php中定义一次就OK了.如果有朋友做过Delphide工程并对工程文件研究过de话,就会发现我刚才说de一个程序只有一个主入口文件de情况与Delphide工程十分相似,因为Delphi除了一个主程序文件(dpr文件),其余de全部是单元文件或是资源文件,都不能独立执行.在PHP中,如果这种情况出现,只需定义一次APPROOT,并在主程序文件中第一句话写成require_once(’settings.php’);,而以后所有de包含全都可以用include(APPROOT.$path);,就保证不会有任何问题,除非您不会写这个“包含文件相对于程序根目录de绝对路径”$path.
这个方法我用了不止一次,收效很好.另外还可以参考JSPdeWEB-INFO中路径de定义方式.
我这个是以不变应万变de公式化de方案,如果有朋友有更好de方案,欢迎提出讨论!如有不明白de也欢迎提出.