忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/10/17 14:48 |
Zend Framework2.1.4 Zend\Stdlib\StringUtils
名前のとおり文字列操作を行う、と思いきや実は文字コード変換Wrapperのようです。
strlen()やmb_strlen()、iconv_strlen()といった関数を意識せずに使い分けることができます。
これはStrategyパターンだっけ。
まあ、いつだったかのZend\Math\BigIntegerと同じような内容です。
<?php
	require_once('path/to/channel/vendor/autoload.php');
	use Zend\Stdlib\StringUtils;
	
	// 対応している文字列操作Wrapper一覧
	$wrappers = StringUtils::getRegisteredWrappers();
	
	// 引数がUTF-8か
	$isUtf8 = StringUtils::isValidUtf8('あいうえお');
	
	// PCRE正規表現をサポートしているか
	$isPcre = StringUtils::hasPcreUnicodeSupport();
	
	// 適切な文字列操作Wrapperを取得
	$wrapperClass = StringUtils::getWrapper('UTF-8', 'SJIS-win');
	$wrapper = new $wrapperClass();
	
	// 現在の文字列操作Wrapperが対応している文字コード一覧を取得
	$encoding = $wrapper->getSupportedEncodings();
	
	// 現在の文字列操作Wrapperが引数の文字コードに対応しているか
	$isSupported = $wrapper->isSupported('EUC-JP');
	
	// 変換する文字コードを設定 前→後に変換
	$wrapper->setEncoding('UTF-8', 'EUC-JP');
	
	// 変換実行 (UTF-8からSJIS-winに)
	$str = $wrapper->convert('あいうえお');
	
	// その他 
	$len = $wrapper->strlen('あいうえお');
	$sub = $wrapper->substr('あいうえお', 1, 3);
	$pos = $wrapper->strpos('あいうえお', 'う');
	$pad = $wrapper->strPad('text', 10, '埋め', STR_PAD_RIGHT);
	$wrap= $wrapper->wordWrap('あいうえお', 3, '。', true);
StringUtils::getWrapper()に変換したい文字コードを渡すと、対応した文字列操作Wrapperを持ってきてくれます。
あとは適当に値を突っ込むだけで自動的に適切な関数を使用して変換や取得を行ってくれます。
文字列操作Wrapperの実体はZend\Stdlib\StringWrapper\StringWrapperInterfaceを実装している何らかのクラスですが、その中身について意識する必要は全くありません。

setEncoding()はStringUtils::getWrapper()の際に呼ばれるので基本的には不要です。
getWrapper()およびsetEncoding()の引数に少し注意が必要で、mb_convert_encoding()などと逆で、前の文字コードから後ろの文字コードに変換します。
strlen()やsubstr()などの文字コードも、setEncoding()の第一引数で指定したものが使われます。

またStringUtils::registerWrapper()で自作のWrapperを登録したりもできるみたいですが、そんな機能使う人なんて滅多にいないだろうからまあいいや。
使い道を無理矢理考えてみるとするならば、文字コード変換ではなく暗号化機能として使うとかでしょうか。

PR


2013/05/22 21:58 | Comments(0) | PHP

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<Zend Framework2.1.4 Zend\Text\Table | HOME | ショートカットメニュー:AuraPHP>>
忍者ブログ[PR]