正在加载......
类别:扩展学习  时间: 2010-04-16 16:58:49; 浏览: 103396; 评论: 0  
Tags : CDATA rss xml

    之前做RSS输出的程序时,用"<![CDATA[内容]]>"解决了description节点文章内容的老断点的问题。当时不甚其解,也没花时间弄明白它的原理。

    今天继续学习了一下XML的基础格式,豁然开朗。

    每种数据格式,如果要被广泛推广,被多种解析器能理解,必需要有其特定的格式,就如语法一般。

    虽然XML 和 HTML 为不同的目的而设计:

以下是引用片段:

XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息,而 XML 旨在传输信息。

    但在语法上,两者有相似之处,HTML的标签都是放在“<”和“>”之间,XML也是如此。如在 XML 文档中放置了一个类似 "<" 字符,那么这个文档会产生一个错误,这是因为解析器会把它解释为新元素的开始。

    而一般文章的内容可能包含意想不到的特殊字符,尤其是技术博客。那么为了避免此类错误,XML要求我们把字符 "<" 替换为实体引用,如:

以下是代码片段:
<message>if salary &lt; 1000 then</message>


    而不是

以下是代码片段:
<message>if salary < 1000 then</message>

    那什么是实体引用呢,如下:

以下是引用片段:
在 XML 中有 5 个预定义的实体引用:
&lt; < 小于
&gt; > 大于
&amp; & 和号
&apos; ’ 单引号
&quot; " 双引号

    注释:严格地讲,在 XML 中仅有字符 "<"和"&" 是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。

    所以在文章内容输出的时候,做一次htmlspecialchars处理是很有必要的。

    除了使用htmlspecialchars处理以外,XML还为我们提供了一个特殊的标签:CDATA 区段(CDATA section)中的文本会被解析器忽略。所谓被解析器忽略并不是舍弃内容,而是忽略中间的内容,不然中间的内容影响XML的格式。

    CDATA 区段开始于 "<![CDATA[",结束于 "]]>":

以下是代码片段:
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0)
   {
   return 1
   }
else
   {
   return 0
   }
}
]]>
</script>


    在上面的例子中,在 CDATA 区段中的所有东西都会被解析器忽略。

    特别注意:

    1:CDATA 区段不能包含字符串 "]]>",所以,CDATA 区段的嵌套是不被允许的。
    2:同时也需要确保在 "]]>" 字符串中没有空格或折行。

    请参考:http://www.w3school.com.cn/xml/xml_cdata.asp

也许您对下面的文章感兴趣:
    很抱歉暂时没有!
类别:PHP心得  时间: 2010-04-14 18:19:20; 浏览: 159910; 评论: 0  

    首先看代码:

以下是引用片段:
class test
{
        //private $_expire_time =  604800; // 604800 = 60 * 60 * 24 * 7
        private $_expire_time =  60 * 60 * 24 * 7;
        public function hehe()
        {
                echo $this->_expire_time;
        }
}
$a = new test;
$a->hehe();
?>
[root@sso115 append]# php test.php
PHP Parse error:  syntax error, unexpected ’*’, expecting ’,’ or ’;’ in /data1/f2r/append/test.php on line 5
Parse error: syntax error, unexpected ’*’, expecting ’,’ or ’;’ in /data1/f2r/append/test.php on line 5

    杯具了,这句话有语法错误:

以下是代码片段:
private $_expire_time =  60 * 60 * 24 * 7;

    那么,这是为什么呢?

    查看手中的手册,没发现有解释,查看官方文档:http://www.php.net/manual/en/language.oop5.properties.php,如下:

以下是引用片段:
Class member variables are called "properties". You may also see them referred to using other terms such as "attributes" or "fields", but for the purposes of this reference we will use "properties". They are defined by using one of the keywords public, protected, or private, followed by a normal variable declaration. This declaration may include an initialization, but this initialization must be a constant value--that is, it must be able to be evaluated at compile time and must not depend on run-time information in order to be evaluated.

    如红色字体,翻译如下:

以下是引用片段:
    这个声明可能会包含初始化,当时这个初始化必须是一个定值,也就是说,这个定值必须在编译时就能确定,而不是依赖于php在运行时再确定值。

    呃,翻译的有点拗口。简而言之,就是说类里面变量的初始化不能是一个表达式,否则编译期间就编译不过去,产生不了Opcodes。

    手册中给出错误和正确的初始化的例子:

以下是代码片段:
class SimpleClass
{
   // invalid property declarations:
   public $var1 = ’hello ’ . ’world’;
   public $var2 = <<hello world
EOD;
   public $var3 = 1+2;
   public $var4 = self::myStaticMethod();
   public $var5 = $myVar;

   // valid property declarations:
   public $var6 = myConstant;
   public $var7 = array(true, false);

   // This is allowed only in PHP 5.3.0 and later.
   public $var8 = <<<’EOD’
hello world
EOD;
}
?>

    关于Opcodes和编译的过程,可以参考以下资料:

以下是引用片段:
深入理解PHP原理之Opcodes
http://www.laruence.com/2008/06/18/221.html

PHP编译缓存
http://www.allniu.com/2010/0108/3820.html

实现PHP的编译执行分离(separating compilation and execution)
http://www.phpchina.com/index.php?action-viewnews-itemid-34001

    说句题外话:

    据说,现在PHP官网没有提供中文文档入口,是因为中文文档没人维护的原因,杯具!:http://opensource.solidot.org/article.pl?sid=08/04/22/2359251

    不过随便进入文档任意语言页面,切换语言中选 "Other",还是可以进入中文文档的。

也许您对下面的文章感兴趣:
    很抱歉暂时没有!
类别:Linux/Unix  时间: 2010-04-13 17:13:13; 浏览: 92584; 评论: 0  
Tags : find ls 速度

    find命令很强大,但没有遇到大量文件时,没想到它是如此的高效,真有一种想干掉ls命令的感觉:

以下是引用片段:

[root@thor104 f2r]# time ls -l /data2/friendresult/*/*/*
bash: /bin/ls: Argument list too long
real    0m1.722s
user    0m1.645s
sys     0m0.075s

[root@thor104 f2r]# time find /data2/friendresult/ -type f > friendfile.txt
real    0m0.129s
user    0m0.048s
sys     0m0.081s

    里面大约有16288个文件。

    看来ls只能是作为一个日常的工具使用,只是find命令是基于什么样的原理才能怎么快呢?上网只找到一个不错的使用解说:《Linux Find 命令精通指南》。共享一下!

也许您对下面的文章感兴趣:
类别:PHP心得  时间: 2009-07-02 20:13:07; 浏览: 100050; 评论: 0  
Tags : 溢出
类别:Linux/Unix  时间: 2009-06-12 23:49:28; 浏览: 154325; 评论: 0  
Tags : find sed
类别:随便说说  时间: 2009-05-19 23:43:09; 浏览: 36601; 评论: 0  
Tags : 奋斗
类别:Linux/Unix  时间: 2009-04-28 22:52:31; 浏览: 34289; 评论: 1  
Tags : cut sort uniq
类别:随便说说  时间: 2009-03-31 14:41:52; 浏览: 16280; 评论: 0  
类别:Linux/Unix  时间: 2009-03-25 19:21:45; 浏览: 29454; 评论: 2  
Tags : apache 内存
类别:扩展学习  时间: 2009-03-24 15:09:59; 浏览: 49131; 评论: 6  
Tags : Monaco 字体
[198][3/20][1][2][3][4][5][6][7][8][9][10][>|] | 回页首
© 2004 - 2019 芽雨快跑 - 本页面所有内容,未经芽雨许可,欢迎转载,请注明出处

京ICP备09017802号