{php文字列関数}
PHP操作文字列
Webアプリケーションでは、ユーザーとシステムとのやりとりは基本的にテキストで行われるため、システムによるテキスト情報、つまり文字列の処理は非常に重要です。文字列に対する操作は数多くありますが、このセクションではそれらを 1 つずつ紹介します。
3.1.1 スペースやその他の特殊記号を削除します
場合によっては、文字列からスペースやその他の無意味な記号を削除する必要があります。たとえば、電子商取引アプリケーションでは、ユーザーが注文の内容 (連絡先住所など) を入力するときに、スペース、ピリオド、その他の文字を入力することがあります。システムは、それらを保存する前に削除し、のみを残すことを期待します。意味のある情報。上記の要件と同様の問題を解決するために、PHP4 以降では、文字列内の特殊記号を削除するための 4 つの関数が提供されています。
文字列トリム (string str [, string charlist]): 文字列 str の先頭と末尾にあるスペースまたはその他の特殊記号を削除します。
String ltrim (string str [, string charlist]): 文字列 str の先頭にあるスペースまたはその他の特殊記号を削除します。
String rtrim (string str [, string charlist]): 文字列 str の末尾にあるスペースまたはその他の特殊記号を削除します。
文字列チョップ (string str [, string charlist]): 関数は rtrim() と同じです。
上記の関数の最初のパラメータ str は操作対象の文字列で、2 番目のオプションのパラメータ charlist は削除する特殊記号を指定します。デフォルトの場合、デフォルト値は次の文字を削除することです: スペース (" ")、タブ。文字(t)、改行文字(n)、復帰文字(r)、null値(
以下では、上記の関数の使用法を説明するための例として、trim() を使用します。1
2 3 $init_str = "、山東省済南市京石路 8 号。" //前後にスペースが含まれます
4 echo $init_str."#
5 $trimmed_str = トリム($init_str) //「山東省済南市京石路8号」
6 echo $trimmed_str."#
7 $trimmed_str = トリム($init_str,', .');//「山東省済南市京石路8号1」。 2 番目のパラメータには 3 文字が含まれることに注意してください。
8 echo $trimmed_str."#
9 $trimmed_str = トリム($init_str,', .0..9'); //「山東省済南市京石路8号」。 0..9 はすべての数字を削除することを意味します
10 echo $trimmed_str."#
11 ?>
行 3 は、先頭にスペースとカンマ、末尾にピリオドとスペースを含む文字列変数を定義します。
5 行目では、2 番目のパラメーターを指定せずに、trim() 関数を使用して、先頭と末尾のスペース記号を削除します。
7 行目は、2 番目のパラメーターを指定したrim() 関数を使用して、2 番目のパラメーターに含まれる文字の先頭と末尾を削除します。つまり、先頭と末尾のスペース、カンマ、ピリオドが削除されます。9行目のtrim()の2番目のパラメータの「0..9」は、ASCコード範囲0と9内のすべての文字が削除されることを示します。
ltrim() と rtrim() の使用法は、trim() に似ており、chop() は実際には rtrim() の別名であり、その機能は rtrim() と同じであるため、再度説明しません。
3.1.2 バックスラッシュの追加と削除
SQL ステートメントを生成するとき (SQL ステートメントは第 2 部で紹介します) など、多くのアプリケーションではエスケープ文字 '' を追加する必要がありますが、これを手動で作成するのは非常に面倒です。同様の問題を解決するために、PHP は文字列からエスケープ文字を自動的に追加または削除する関数を提供します。
String addcslashes (string str, string charlist): 最初のパラメータ str は、操作される元の文字列で、2 番目のパラメータ charlist は、元の文字列のどの文字の前に文字「」を付ける必要があるかを示します。
文字列ストリップスラッシュ (文字列 str): 文字列から「」を削除します。
両方の使用については、以下のコードを参照してください。
1
2 3 $init_str = "select * from Books where name = 'PHP Manual'";
4 echo $init_str."#
5 $new_str = addcslashes($init_str,"'");
6 echo $new_str."#
7 $init_str2 = ストリップスラッシュ($new_str);
8 echo $init_str2."#
";
9 ?>
代码在第5行在$init_str中的‘’’前加上了‘\’,又在第9行将其去掉。
3.1.3 生成HTML元素
HTML元素的书写非常麻烦,下面简单列出一些常用字符在HTML中的表示方式。
'&':'&'
双引号‘"’:'"'
单引号‘'’:'''
'<' :'<'
'>' :'>'
此处,称'&'等为HTML元素,'&' 等为其显示字符串。例如,若想在页面上的显示 “链接”,HTML应写为“<a href='test'>Test</a>”,否则,将只在页面上显示一个链接信息。
PHP提供了下面的函数来自动转化HTML元素。
string htmlspecialchars(string str [, int quote_style [, string charset]]):把一些常用的HTML元素转换为显示字符串。
string htmlentities(string str [, int quote_style [, string charset]]):把所有的HTML元素转换为显示字符串。
string html_entity_decode(string str [, int quote_style [, string charset]]):把显示字符串转化为HTML元素。
上面函数中,参数str表示原始字符串;可选参数quote_style确定是否转换双引号和单引号,取值范围为{ ENT_COMPAT , ENT_QUOTES , ENT_NOQUOTES},分别表示只转换双引号、全转换、全不转换,缺省时默认值为ENT_COMPAT;第3个参数charset指定了转换中所用的字符集。PHP4及以上版本所支持的字符集参考表3.1。
表3.1 PHP4及以上版本支持的字符集
字 符 集
说 明
ISO-8859-1
西欧字符集
ISO-8859-15
西欧字符集扩展
UTF-8
兼容ASCII的宽字节字符集
cp1252
西欧字符集,Windows系统默认
BIG5
繁体中文,用于中国台湾省
GB2312
简体中文,用于中国大陆
BIG5-HKSCS
繁体中文扩展,用于中国香港
Shift_JIS
日文
EUCJP
日文
下面的示例中,首先使用htmlentities()函数得到一个HTML语句的显示字符串,然后再用html_entity_decode()函数重新把显示字符串转回HTML元素。运行结果如图3.1所示。
1
2
3 $orig = "我正在学习! ";
4 $a = htmlentities($orig,ENT_COMPAT,"GB2312");
5 $b = html_entity_decode($a);
6 echo $a; // I'll "walk" the <b>dog</b> now
7 echo $b; // I'll "walk" the dog now
8 ?>
图3.1 PHP生成HTML元素示例
注意
函数html_entity_decode()只支持PHP4.0.3及以上版本。
除上面所提到的3个函数之外,用于HTML元素操作的函数还包括nl2br()、get_html_translation_table()等,功能与上述函数类似,本书不再一一详述。
3.1.4 分解字符串
分解字符串是指把一个字符串通过特殊的符号分解为许多子串。例如,时间字符串“2005-01-01 12:59:59”可以利用符号“-”、空格和“:”分解为年月日时分秒具体的值。PHP提供了下列函数完成类似功能:
array split(string pattern, string str [, int limit])
その中で、パラメーター パターンは、分解識別子として使用されるシンボルを指定します。str は、操作される元の文字列です。3 番目のオプションのパラメーター制限は、返される部分文字列の数の最大値であり、デフォルトではすべてが返されます。関数の戻り値は配列です。これについてはセクション 3.2 で説明します。ここで、関数の戻り値は一時的に複数の部分文字列として理解できます。
次の例では、文字列「2005-01-01 12:59:59」を年、月、日、時、分、秒の部分文字列に分解できます。
1
2
3 $date = "2005-01-01 12:59:59";
4 リスト ($year,$month,$day,$hour,$minite,$sec) = 分割 ('[- :]',$date);
5 echo "{$年}年{$月}月{$日}日{$時}時{$分}分{$秒}秒
n";
6 ?>
上記の例では「2005年1月1日 12時59分59秒」が出力されます。 4 行目では、split 関数を使用して時間を分解します。分解された識別子には、5 行目に出力される「-」、スペース、および「:」が含まれます。
split以外にも、同様の機能を持つ関数にはpreg_split()、explode()、implode()、chunk_split()、wordwrap()などがあります。
3.1.5 文字列のフォーマット
フォーマット文字列は、多くの変数を含むテキストを特定のフォーマットで出力するために使用されます。これは最も一般的に使用される操作です。 PHP の fprintf() 関数はこの関数を完成させるものであり、C 言語の使用に慣れている読者はこの関数に精通しているはずです。関数のプロトタイプは次のとおりです:
文字列 sprintf(文字列形式、混合 [引数]...)
パラメータの形式は、「%」以降の文字で各変数の形式を指定します。次の例では、浮動小数点数の小数部分をフォーマットします。
1
2
3 $name="张三";
4 $money1 = 68.75;
5 $money2 = 54.35;
6 $money = $money1 + $money2;
7 // このとき、変数$moneyの値は「123.1」です;
8 $formatted = sprintf ("%s には ¥%01.2f があります。",$name, $money);
9 echo $formatted; //張三は¥123.10。
10 ?>
6 行目では算術演算により $money の値は 123.1 となり、8 行目では sprintf で %01.2 までの小数点以下 2 桁を表示する形式が定義されています。
sprintf() に加えて、データのフォーマットに一般的に使用される関数には、printf()、sprintf()、sscanf()、fscanf()、vsprintf()、number_format() などが含まれます。
3.1.6 部分文字列の取得と置換
部分文字列の取得とは、文字列の連続部分を取得することを意味します。たとえば、文字列「2005-01-01 12:59:59」から時刻文字列を取得します。 PHP には、文字列の特定の部分を取得または置換するための 2 つの関数が用意されています:
String substr (string str, int start [, int length]): 部分文字列を取得します。最初のパラメータ str は、操作対象の文字列です。2 番目のパラメータ start は、合計文字列内の部分文字列の開始位置を示します。パラメータ オプションのパラメータは、取得される部分文字列の長さを指定します。正の数値の場合は、部分文字列が先頭から右に取得されることを示します。それ以外の場合、デフォルト値は先頭から右に取得されます。文字列の終わり。
string substr_replace (string str, string replace, int start [, int length]): 取得に基づいて置換します。つまり、取得した部分文字列を 2 番目のパラメーター置換で置換します。
次の例では、まず substr() を使用して文字列「2005-01-01 12:59:59」の時刻情報を取得し、次に substr_replace() 関数を使用して年の情報を「2006」に変更します。1
2
3 $date = "2005-01-01 12:59:59";
4 $time=substr($date,11,8); //部分文字列「12:59:59」の開始位置は 11 で、長さは 8 です
5 echo "time:$time
6 $new_date=substr_replace($date,"2006",0,4);
7 echo "新しい日付:$new_date";
8 ?>
3.1.7 キャラクターの配置
文字の検索とは、文字列内で特定の文字が最初に出現する位置を見つけることを指します。この機能は strpos() 関数で実行できます。
int strpos (string str, char needle): 第一引数 str は処理対象の文字列、第二引数 neede は検索対象の文字です。以下の例では、strpos()で文字「@」を検索し、部分文字列取得関数strstr()と組み合わせてユーザー名を取得することでメールアドレスを処理しています。
1
2
3 $email = "zhangsan@php.net";
4 $i=strpos($email,'@');
5 $name=substr($email,0,$i);
6 echo $name;
7 ?>
例の 4 行目では、strpos() を使用して文字「@」の位置を取得し、5 行目では substr() を使用してユーザー名の部分文字列情報を取得しています。
3.1.8 文字列の長さを求める
文字列の長さを求めることも一般的な操作です。使用される関数は strlen(): int strlen (string str) です。
この関数は非常に単純で、文字列 str の長さを返します。前のセクションの例を引き続き使用して、電子メール文字列のユーザー名を置き換えます。つまり、lisi@php.net に変更します。
1
2
3 $email = "zhangsan@php.net";
4 $i=strpos($email,'@');
5 $name=substr($email,0,$i);
6 $email=substr_replace($email,"lisi",0,strlen($name));
7 echo $email;
8 ?>
3.1.9 ASCIIエンコーディングを取得する
文字を ASCII エンコードに変換することは、実際のアプリケーションで非常に役立つことがあります。たとえば、文字列がデータベースにバイナリ形式で保存されており、データ取得関数が ASCII コード文字列を返す必要がある場合、文字列に変換する必要があります。ディスプレイ用。 ASCII コードと文字を変換するために PHP が提供する関数は 2 つあります。
String chr (int ascii): ASCII コードを文字列に変換します。
int ord (string string): 文字列を ASCII コードに変換します。
両方を使用する場合は、次の例を参照してください。
1
2
3 $letter = chr(65) //A
;4 $ascii=ord('A') //65
;5 echo $letter;
6 echo $ascii;
7 ?>
3.1.10 文字列を比較する
文字列の比較ルールは辞書のソート方法に従い、前にあるものは後ろにあるものより小さくなります。英語の辞書と同様に、後のエントリは前のエントリよりも大きくなります。文字列比較を実装するPHP関数は以下のとおりです。
int strncmp (string str1, string str2[, int len]): 関数の最初の 2 つのパラメータは、比較する 2 つの文字列です。3 番目のオプションのパラメータは、比較する 2 つの文字列の先頭から何文字かを指定できます。 str1>str2 の場合、関数は正の数を返し、str1=str2 の場合、0 を返し、str1 1 2 3 $str1="中国"; 4 $str2="北京"; 5 $i=strcmp($str1,$str2); 6 echo $i //1 7 ?> strcmp() に加えて、文字列比較または並べ替え関数を備えた関数は、strcasecmp()、strncmp()、strncasecmp()、strnatcasecmp()、strstr()、natsort()、および natcasesort() です。 3.1.11 大文字と小文字の変換 大文字と小文字を区別せずに 2 つの文字列が等しいかどうかを比較するには、前のセクションの strcmp() 関数を使用するだけでは機能しません。この場合、2 つの文字列を同時に大文字または小文字に変換してから比較することができます。 。たとえば、これは、Web サイトにログインするためのユーザー名とパスワードを決定するときに (大文字と小文字が区別されない場合に) 必要になることがよくあります。文字列の大文字と小文字の変換を実装する PHP 関数は次のとおりです。 String strto lower (string str): str を小文字に変換します。 String strtoupper (string string): str を大文字に変換します。 String ucfirst(string str): str の最初の文字を大文字に変換します。 String ucwords (string str): str 内の各単語の最初の文字を大文字に変換します。 以下の例を参照してください。 1 2 3 $str1="山東省"; 4 $str2="中国";
6 echo $str1; //Shangdong Province 7 $str1=strtoupper($str1); 8 echo $str1; //SHANGDONG PROVINCE 9 $str2=strtolower($str2); 10 echo $str2; //china 11 ?> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ PHP字符串函数分类 1查找字符位置函数: ']):去除HTML和PHP标记 ');
strpos($str,search,[int]):查找search在$str中的第一次位置从int开始;
stripos($str,search,[int]):函数返回字符串在另一个字符串中第一次出现的位置。该函数对大小写不敏感
strrpos($str,search,[int]):查找search在$str中的最后一次出现的位置从int
2、提取子字符函数(双字节)
submit($str,int start[,int length]):从$str中strat位置开始提取[length长度的字符串]。
strstr($str1,$str2):从$str1(第一个的位置)搜索$str2并从它开始截取到结束字符串;若没有则返回FALSE。
stristr() 功能同strstr,只是不区分大小写。
strrchr() 从最后一次搜索到的字符处返回;用处:取路径中文件名
3、替换字符串
str_replace(search,replace,$str):从$str中查找search用replace来替换
str_irreplace(search,replace,$str):
strtr($str,search,replace):这个函数中replace不能为"";
substr_replace($Str,$rep,$start[,length])$str原始字符串,$rep替换后的新
字符串,$start起始位置,$length替换的长度,该项可选
4、字符长度
int strlen($str)
5、比较字符函数
int strcmp($str1,$str2):$str1>=<$str2分别为正1,0,-1(字符串比较)
strcasecmp() 同上(不分大小写)
strnatcmp("4","14") 按自然排序比较字符串
strnatcasecmp() 同上,(区分大小写)
6、分割成数组函数
str_split($str,len):把$str按len长度进行分割返回数组
split(search,$str[,int]):把$str按search字符进行分割返回数组int是分割几次,后面的将不分割
expload(search,$str[,int])
7、去除空格:ltrim、rtrim、trim
8、加空格函数
chunk_split($str,2);向$str字符里面按2个字符就加入一个空格;
9、chr、ord--返回指定的字符或ascii
10、HTML代码有关函数
nl2br():使\n转换为<br>。
strip_tags($str[,'
在$str中所有HTML和PHP代码将被去除,可选参数为html和PHP代码作用是将保留
可选参数所写的代码。
如:echo strip_tags($text, '
htmlspecialchars($str[,参数]):页面正常输出HTML代码参数是转换方式
11、字符大小写转换函数
strtolower($str) 字符串转换为小写
strtoupper($str) 字符串转换为大写
ucfirst($str) 将函数的第一个字符转换为大写
ucwords($str) 将每个单词的首字母转换为大写
12、数据库相关函数
addslashes($str):使str内单引号(')、双引号(")、反斜线(\)与 NUL
字符串转换为\',\",\\。
magic_quotes_gpc = On 自动对 get post cookie的内容进行转义
get_magic_quotes_gpc()检测是否打开magic_quotes_gpc
stripslashes() 去除字符串中的反斜杠
13、连接函数
implode(str,$arr) 将字符串数组按指定字符连接成一个字符串;implode()函数有个别名函数join
addcslashes —— 为字符串里面的部分字符添加反斜线转义字符
addslashes —— 用指定的方式对字符串里面的字符进行转义
bin2hex —— 将二进制数据转换成十六进制表示
chr —— 返回一个字符的ASCII码
chunk_split —— 按一定的字符长度将字符串分割成小块
convert_cyr_string —— 将斯拉夫语字符转换为别的字符
convert_uudecode —— 解密一个字符串
convert_uuencode —— 加密一个字符串
count_chars —— 返回一个字符串里面的字符使用信息
crc32 —— 计算一个字符串的crc32多项式
crypt —— 单向散列加密函数
explode —— 将一个字符串用分割符转变为一数组形式
fprintf —— 按照要求对数据进行返回,并直接写入文档流
get_html_translation_table —— 返回可以转换的HTML实体
html_entity_decode —— htmlentities ()函数的反函数,将HTML实体转换为字符
htmlentities —— 将字符串中一些字符转换为HTML实体
htmlspecialchars_decode —— htmlspecialchars()函数的反函数,将HTML实体转换为字符
htmlspecialchars —— 将字符串中一些字符转换为HTML实体
implode —— 将数组用特定的分割符转变为字符串
join —— 将数组转变为字符串,implode()函数的别名
levenshtein —— 计算两个词的差别大小
localeconv —— 获取数字相关的格式定义
ltrim —— 去除字符串左侧的空白或者指定的字符
md5_file —— 将一个文件进行MD5算法加密
md5 —— 将一个字符串进行MD5算法加密
metaphone —— 判断一个字符串的发音规则
money_format —— 按照参数对数字进行格式化的输出
nl_langinfo —— 查询语言和本地信息
nl2br —— 将字符串中的换行符“\n”替换成“
”
number_format —— 按照参数对数字进行格式化的输出
ord —— 将一个ASCII码转换为一个字符
parse_str —— 把一定格式的字符串转变为变量和值
print —— 用以输出一个单独的值
printf —— 按照要求对数据进行显示
quoted_printable_decode —— 将一个字符串加密为一个8位的二进制字符串
quotemeta —— 对若干个特定字符进行转义
rtrim —— 去除字符串右侧的空白或者指定的字符
setlocale —— 设置关于数字,日期等等的本地格式
sha1_file —— 将一个文件进行SHA1算法加密
sha1 —— 将一个字符串进行SHA1算法加密
similar_text —— 比较两个字符串,返回系统认为的相似字符个数
soundex —— 判断一个字符串的发音规则
sprintf —— 按照要求对数据进行返回,但是不输出
sscanf —— 可以对字符串进行格式化
str_ireplace —— 像str_replace()函数一样匹配和替换字符串,但是不区分大小写
str_pad —— 对字符串进行两侧的补白
str_repeat —— 对字符串进行重复组合
str_replace —— 匹配和替换字符串
str_rot13 —— ROT13 は文字列を暗号化します
str_shuffle - 文字列内の文字をランダムに並べ替えます
str_split——文字間隔に従って文字列を配列に分割します
str_word_count —— 文字列内の英単語情報を取得します
strcasecmp - 大文字と小文字を区別せずに文字列を比較します
strchr – 比較により文字列の一部を返す strstr() 関数のエイリアス
strcmp - 文字列のサイズを比較します
strcoll – ローカル設定に基づく文字列のサイズ比較
strcspn - 連続して一致しない文字の長さの値を返します
ストリップタグ - 文字列から HTML と PHP コードを削除します
ストリップスラッシュ - addcslashes() 関数によって処理される文字列のアンチエスケープ
tripos - 最初に一致した位置を検索して返します。一致は大文字と小文字を区別しません
ストリップスラッシュ -addslashes() 関数によって処理される文字列のアンチエスケープ
stristr - 比較により文字列の一部を返します。比較では大文字と小文字は区別されません
strlen - 文字列のエンコードされた長さを取得します
strnatcasecmp - 大文字と小文字を区別しない自然な並べ替えを使用して文字列を比較します
strnatcmp - 自然なソートを使用して文字列サイズを比較します
strncasecmp - 大文字と小文字を区別せずに、文字列の最初の N 文字を比較します
strncmp - 文字列の最初の N 文字のサイズを比較します
strpbrk - 文字列の一部を比較して返します
strpos – 最初に一致した位置を検索して返します
strrchr - 後ろから前へ比較して文字列の一部を返します
strrev - 文字列内のすべての文字を反転します
strripos - 後ろから前に検索し、最初に一致した位置を返します。一致は大文字と小文字を区別しません
strrpos - 後ろから前に検索して、最初に一致した位置を返します
strspn —— 文字の連続出現の長さを照合して値を返します
strstr - 文字列の一部を比較して返します
strtok - 指定された文字を使用して文字列を分割します
strto lower - 文字列を小文字に変換します
strtoupper - 文字列を大文字に変換します
strtr - 文字列を比較および置換します
substr_compare - インターセプト後の文字列を比較します
substr_count —— 文字列内の特定の文字セグメントの出現数をカウントします
substr_replace - 文字列内の一部の文字を置換します
substr - 文字列をインターセプトします
トリム—文字列の両側にある空白または指定された文字を削除します
ucfirst - 指定された文字列の最初の文字を大文字に変換します
ucwords - 指定された文字列内の各英単語の最初の文字を大文字にします
vfprintf - 必要に応じてデータを返し、それをドキュメント ストリームに直接書き込みます
vprintf——必要に応じてデータを表示します
vsprintf - 必要に応じてデータを返しますが、出力はしません
wordwrap - 特定の文字長に従って文字列を分割します