php的转义字符串

 更新时间:2016年11月25日 16:08  点击:1525

今天碰到一个处理文件特殊字符的事情,再次注意到这个问题,在php中:

* 以单引号为定界符的php字符串,支持两个转义''和\
* 以双引号为定界符的php字符串,支持下列转义:
    n 换行(LF 或 ASCII 字符 0x0A(10))
    r 回车(CR 或 ASCII 字符 0x0D(13))
    t 水平制表符(HT 或 ASCII 字符 0x09(9))
    \ 反斜线
    $ 美元符号
    " 双引号
    [0-7]{1,3}               此正则表达式序列匹配一个用八进制符号表示的字符 
    x[0-9A-Fa-f]{1,2}  此正则表达式序列匹配一个用十六进制符号表示的字符 

举几个例子:

一个包含特殊字符的例子:

$str = "ffffffff";
echo(strlen($str));
echo("n");
for($i=0;$i<strlen($str);$i++)echo("t".ord($str{$i}));
echo("n");

输出结果:
----------------------

9
        102     102     102     102     0       102     102     102     102

替换特殊字符的例子

$str = "ffffffff";
$str = str_replace("x0", "", $str); 
//或者用$str = str_replace("", "", $str);
//或者用$str = str_replace(chr(0), "", $str);
echo(strlen($str));
echo("n");
for($i=0;$i<strlen($str);$i++)echo("t".ord($str{$i}));
echo("n");
输出结果:
----------------------
8
        102     102     102     102     102     102     102     102


八进制ascii码例子:

//注意,符合正则[0-7]{1,3}的字符串,表示一个八进制的ascii码。
$str = "1237101188";  //这里的8不符合要求,被修正为"\8" (ascii为92和56)
echo(strlen($str));
echo("n");
for($i=0;$i<strlen($str);$i++)echo("t".ord($str{$i}

PHP的学习

学习使用了阵子PHP,PHP开发速度应该是不错的,相同的项目PHP的代码量估计要比用JSP要少很多。
但是在使用过程中也发现一些问题,也看了一些别人PHP项目代码,说下一下感受.

1. PHP灵活但不能涂鸦一般使用.
如果把数据库操作都写在一个页面上,维护就吃力了.至少要把数据库操作跟页面渲染分离开,类似JSP
加JavaBean的方式,相信这也是PHPer采用的简单MVC.

2.PHP常量
PHP array的array的读写都很灵活,可能页面会经常有这样的
echo $myArray[''myKey''];数据库操作mysql_fetch_array返回的row也是,万一key值''myKey''开发的
时候没定义好,又或''myKey''是列名,突然要改了,这个常量每个文件都有的话,改起代码来就郁闷了.
PHP会使用define,类里面会使用const来代表常量
define(''MY_CONSTANT'', ''MY_VALUE'');
echo MY_CONSTANT;
class MyClass{
    const MY_CONSTANT = ''MY_VALUE'';
    public function test(){
    echo self::MY_CONSTANT;
    }
}
//External usage
echo MyClass::MY_CONSTANT;

3.=号赋值拷贝
=大多情况下是拷贝的形式的赋值.
$oldValue = array(1,2,3);
$newValue = $oldValue;
$newValue[] = 4;
echo $oldValue;//1,2,3
echo $newValue;//1,2,3,4
可以看到$newValue只是值拷贝,它的修改不会改变$oldValue.估计class实例的赋值也是拷贝。

还有什么会导致拷贝,function的入参,和return返回值应该也是默认是值拷贝传递.
function test($param) {
echo $param;//string
$param = ''newstring'';
echo $param;//newstring
}
$strParam = ''string'';
test($strParam);
echo $strParam;//string

foreach迭代array的时候可能导致拷贝
$myArray = array(''key1''=>''value1'',''key2''=>''value2'');
foreach($myArray as $key=>$value) {
    echo "$key=$value<BR/>";
}
按照PHP手册的说法就是foreach的时候是拷贝了一个新的array,即使在循环中修改了值,对旧array没影响.

=号对于clone好像是不算是拷贝?

个人感觉不太喜欢拷贝,如果拷贝的东西比较大,估计会影响执行效率了吧.

4. 使用reference引用避免拷贝
其实就是使用=& 引用其实是别名Alias,觉得这个就是java,c#类默认使用的,PHP必须显式加个&,有点像
c++.
$oldValue = array(1,2,3);
$newValue = &$oldValue;
$newValue[] = 4;
echo $oldValue;//1,2,3,4
echo $newValue;//1,2,3,4

PHP4里面$myClassInstance = new MyClass();其实是一种拷贝, 必须
$myClassInstance = &new MyClass();
PHP5里面就支持好多了默认new出来的东西就是PHP4里面的&new引用。

入参如果数据大(假设是一个大数组)可以传递引用避免值拷贝
function test(&$param) {
echo $param;//string
$param = ''newstring'';
echo $param;//newstring
}
$strParam = ''string'';
test($strParam);
echo $strP 1.字符串的整理:chop(),itrim(),trim()

trim()函数用来整理用户输入数据,如下显示:

$name=trim($name);

$email=trim($email);

tirm()函数可以去除字符串开始位置和结束位置的空格,并将结果字符串返回。默认情况下去除换行符(n)回车符(r)水平(t)和垂直制表符(x0B) 字符串结束符号()和空格。

以下是来自于手册

Without the second parameter, rtrim() will strip these characters:

    * " " (ASCII 32 (0x20)), an ordinary space.
    * "t" (ASCII 9 (0x09)), a tab.
    * "n" (ASCII 10 (0x0A)), a new line (line feed).
    * "r" (ASCII 13 (0x0D)), a carriage return.
    * "" (ASCII 0 (0x00)), the NUL-byte.
    * "x0B" (ASCII 11 (0x0B)), a vertical tab

Example#1 Usage example of rtrim()
<?php

$text = "ttThese are a few words :) ...  ";
$binary = "x09Example stringx0A";
$hello  = "Hello World";
var_dump($text, $binary, $hello);

print "n";

$trimmed = rtrim($text);
var_dump($trimmed);

$trimmed = rtrim($text, " t.");
var_dump($trimmed);

$trimmed = rtrim($hello, "Hdle");
var_dump($trimmed);

// trim the ASCII control characters at the end of $binary
// (from 0 to 31 inclusive)
$clean = rtrim($binary, "x00..x1F");
var_dump($clean);

?>

上例将输出:

string(32) "        These are a few words :) ...  "
string(16) "    Example string
"
string(11) "Hello World"

string(30) "        These are a few words :) ..."
string(26) "        These are a few words :)"
string(9) "Hello Wor"
string(15) "    Example string"

函数explode() implode() join()

explode — 使用一个字符串分割另一个字符串

字符串的排序 strcmp() strcasecmp() strnatcmp()

在字符串中查找字符串 strstr() strchr() strrchr() stristr()

太多了,慢慢看手册

< <HTML>
<HEAD>
<TITLE> php调用js文件的好办法</TITLE>
</HEAD>
<BODY>
<scrīpt language=''javascrīpt'' type=''text/javascrīpt'' src=''test.php''></scrīpt>
<scrīpt>
ok("aaaaaa!");
</scrīpt>
</BODY>
</HTML>


test.php:

<?php
echo "
function ok(msg){
alert(msg);
}
";
?>

 最近开发一个项目,用到这个,记一下:

关键就是两点

1 define('CLIENT_MULTI_RESULTS', 131072);
2 
3 $link = mysql_connect("127.0.0.1", "root", "",1,CLIENT_MULTI_RESULTS) or die("Could not connect: ".mysql_error());

下面就可以正常使用了,以下是例子程序。

 1 <?php
 2     define('CLIENT_MULTI_RESULTS', 131072);
 3 
 4     $link = mysql_connect("127.0.0.1", "root", "",1,CLIENT_MULTI_RESULTS) or die("Could not connect: ".mysql_error());
 5     mysql_select_db("vs") or die("Could not select database");
 6 ?>
 7 
 8 <?php
 9         $result = mysql_query("call get_news_from_class_id(2)") or die("Query failed:" .mysql_error());
10         while($row = mysql_fetch_array($result, MYSQL_ASSOC))
11         {
12                 $line = '<tr><td><a target = _blank href=''.$row["url"].''>'.$row["title"].'('.$row["page_time"].')'.'</a></td></tr>';
14                 echo $line;
15                 printf("n");
16 
17         }
18         mysql_free_result($result);
19 ?>
20 
21 <?php
22     mysql_close($link);
23 ?>

<
[!--infotagslink--]

相关文章

  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • c#中判断字符串是不是数字或字母的方法

    这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
  • PostgreSQL判断字符串是否包含目标字符串的多种方法

    这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
  • 详解C++ string常用截取字符串方法

    这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • php字符串按照单词逐个进行反转的方法

    本文实例讲述了php字符串按照单词进行反转的方法。分享给大家供大家参考。具体分析如下:下面的php代码可以将字符串按照单词进行反转输出,实际上是现将字符串按照空格分隔到数组,然后对数组进行反转输出。...2015-03-15
  • 运行vbs脚本报错无效字符、中文乱码的解决方法(编码问题)

    今天在写一个vbs的时候,发现中文乱码,后来写好代码正常运行的代码压缩一下给了同事,发现报无效字符,经过验证后发现原来是编码的问题导致,这里就为大家分享一下...2020-06-30
  • 使用list stream: 任意对象List拼接字符串

    这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • C# 16 进制字符串转 int的方法

    这篇文章主要介绍了C# 16 进制字符串转 int的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 获取中文字符串的实际长度代码

    JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: 复制代码 代码如下: function strLength(str) { var realLength = 0, len = str.length, charCode = -1;...2014-06-07
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • PostgreSQL 字符串处理与日期处理操作

    这篇文章主要介绍了PostgreSQL 字符串处理与日期处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-01
  • php 中英文混合字符串截取

    文章介绍一个实用的函数,我们如果用php substr来截取字符在中文上处理的很有问题,今天自己写了一个比较好的中文与英文字符截取的函数,有需要的朋友可以参考下。 ...2016-11-25
  • C#实现对字符串进行大小写切换的方法

    这篇文章主要介绍了C#实现对字符串进行大小写切换的方法,涉及C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • c#将字节数组转成易读的字符串的实现

    这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • C#获取字符串后几位数的方法

    这篇文章主要介绍了C#获取字符串后几位数的方法,实例分析了C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 解决vue字符串换行问题(绝对管用)

    这篇文章主要介绍了解决vue字符串换行问题(绝对管用),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-06
  • C#判断一个字符串是否是数字或者含有某个数字的方法

    这篇文章主要介绍了C#判断一个字符串是否是数字或者含有某个数字的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 【C#基础】Substring截取字符串的方法小结(推荐)

    这篇文章主要介绍了Substring截取字符串方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • 使用PHP similar text计算两个字符串相似度

    在网站开发中,我们经常使用php similar text 计算两个字符串相似度;1,similar_text的用法 如果我想计算"ly89cn"和"ly89"的相似程度,有两种表示方法复制代码 代码如下: echo similar_text('ly89cn', 'ly89'); ...2015-11-08