Created
April 13, 2011 11:37
-
-
Save koshiaaaaan/917388 to your computer and use it in GitHub Desktop.
とっても使えない PHP スニペットいろいろ。
そのうち適当に増やす。
てか、 PHP5 だけでいいような気がするので、多分次更新することがあれば PHP4 は消す。
動作環境は詳しく調べてないけど、 PHP 4.0.6 以上、 PHP 5.0.2 以上なら動くんじゃないかな?
PHP4 で使うときは、 PHP5 の処理を消すか、別ファイルから読み込むようにしないとパースエラーで怒られちゃうよ。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
if (!version_compare('5.0.0', phpversion(), '<')) { | |
if (!function_exists('array_fill')) { | |
function array_fill($start_index, $num, $value) { | |
$result = array(); | |
for ($i = $start_index; $i < $num + $start_index; $i++) { | |
$result[$i] = $value; | |
} | |
return $result; | |
} | |
} | |
/** | |
* PHP4 | |
*/ | |
class Snippets | |
{ | |
/** | |
* マルチバイト文字列を特定の幅で改行する。 | |
* 通常の wordwrap とは動作が大きく違うので、ご注意下さい。 | |
* mb_detect_order() がちゃんと設定されているか、 | |
* 第4引数を指定しないと動作が保証されません。 | |
* | |
* @param string $str | |
* @param integer $width = 76 | |
* @param string $break = "\r\n" | |
* @return string | |
*/ | |
function mbWordwrap($str, $width = 76, $break = "\r\n", $enc = null) | |
{ | |
$lines = Snippets::stringToArray($str, 0); | |
$return = array(); | |
foreach ($lines as $line) { | |
$return[] = Snippets::mbChunkSplit($line, $width, $break, $enc); | |
} | |
return join('', $return); | |
} | |
/** | |
* マルチバイトを含む文字列をより小さな部分に分割する。 | |
* マルチバイトの文字幅を2として計算しています。 | |
* mb_detect_order() がちゃんと設定されているか、 | |
* 第4引数を指定しないと動作が保証されません。 | |
* | |
* @param string $str | |
* @param integer $width = 76 | |
* @param string $break = "\r\n" | |
* @param string $enc = null | |
* @return string | |
*/ | |
function mbChunkSplit($str, $width = 76, $break = "\r\n", $enc = null) | |
{ | |
if ($enc === null) { | |
$enc = mb_detect_encoding($str, mb_detect_order(), false); | |
} | |
$return = ''; | |
$strLength = mb_strlen($str, $enc); | |
for ($i = 0, $length = 0; $i < $strLength; $i++) { | |
$char = mb_substr($str, $i, 1, $enc); | |
$charWidth = (strlen($char) > 1) ? 2 : 1; | |
$length += $charWidth; | |
if ($length > $width) { | |
$return .= $break . $char; | |
$length = $charWidth; | |
} else { | |
$return .= $char; | |
} | |
} | |
return $return; | |
} | |
/** | |
* 文字列を改行で区切った配列に変換します。 | |
* 第二引数には 2 と 4 の組み合わせをフラグとして使用出来ます。 | |
* 2 は配列の各要素の最後に改行文字を追加しません。 | |
* 4 は空行を読み飛ばします。 | |
* | |
* @param string $str | |
* @param integer $flags = 0 | |
* @return array | |
*/ | |
function stringToArray($str, $flags = 0) | |
{ | |
if ((2 & $flags) === 2) { | |
$pattern = '/(.+?)(?:\r\n|\r|\n|$)/'; | |
} else { | |
$pattern = '/(.+?(?:\r\n|\r|\n|$))/'; | |
} | |
preg_match_all($pattern, strval($str), $matches); | |
if ((4 & $flags) === 4) { | |
return array_merge(array_diff($matches[1], array("\r", "\n", "\r\n", ""))); | |
} | |
return $matches[1]; | |
} | |
/** | |
* 特殊文字を HTML エンティティに変換する。 | |
* 配列が渡されたら、配列全体に適応される。 | |
* | |
* @param mixed $string | |
* @param integer $flag = ENT_QUOTES | |
* @param string $charset = 'UTF-8' | |
* @param boolean $doubleEncode = true | |
* @param string $method = 'htmlentities' | |
* @return mixed | |
*/ | |
function escape($string, $flags = ENT_QUOTES, $charset = 'UTF-8', $doubleEncode = true, $func = 'htmlentities') | |
{ | |
if (is_array($string)) { | |
return array_map( | |
array('Snippets', 'escape'), | |
$string, | |
array_fill(0, count($string), $flags), | |
array_fill(0, count($string), $charset), | |
array_fill(0, count($string), $doubleEncode), | |
array_fill(0, count($string), $func) | |
); | |
} | |
$string = strval($string); | |
if ($doubleEncode) { | |
$trans_tbl = get_html_translation_table(HTML_ENTITIES, $flags); | |
$trans_tbl = array_flip($trans_tbl); | |
$string = strtr($string, $trans_tbl); | |
} | |
return $func($string, $flags, $charset); | |
} | |
} | |
} else { | |
/** | |
* PHP5 | |
*/ | |
class Snippets | |
{ | |
/** | |
* stringToArrayメソッドのフラグ。 | |
* STRING_IGNORE_NEW_LINES は改行コードを含めない。 | |
* STRING_SKIP_EMPTY_LINES は改行をスキップする。 | |
*/ | |
const STRING_IGNORE_NEW_LINES = 2; | |
const STRING_SKIP_EMPTY_LINES = 4; | |
/** | |
* escapeメソッドで使用するエスケープ用関数の種類。 | |
*/ | |
const HTMLENTITIES = 'htmlentities'; | |
const HTMLSPECIALCHARS = 'htmlspecialchars'; | |
/** | |
* escapeメソッドで使用するエスケープ用関数。 | |
*/ | |
public static $escapeFunction = self::HTMLENTITIES; | |
/** | |
* マルチバイト文字列を特定の幅で改行する。 | |
* 通常の wordwrap とは動作が大きく違うので、ご注意下さい。 | |
* mb_detect_order() がちゃんと設定されているか、 | |
* 第4引数を指定しないと動作が保証されません。 | |
* | |
* @param string $str | |
* @param integer $width = 76 | |
* @param string $break = "\r\n" | |
* @return string | |
*/ | |
public static function mbWordwrap($str, $width = 76, $break = "\r\n", $enc = null) | |
{ | |
$lines = self::stringToArray($str, 0); | |
$return = array(); | |
foreach ($lines as $line) { | |
$return[] = self::mbChunkSplit($line, $width, $break, $enc); | |
} | |
return join('', $return); | |
} | |
/** | |
* マルチバイトを含む文字列をより小さな部分に分割する。 | |
* マルチバイトの文字幅を2として計算しています。 | |
* mb_detect_order() がちゃんと設定されているか、 | |
* 第4引数を指定しないと動作が保証されません。 | |
* | |
* @param string $str | |
* @param integer $width = 76 | |
* @param string $break = "\r\n" | |
* @param string $enc = null | |
* @return string | |
*/ | |
public static function mbChunkSplit($str, $width = 76, $break = "\r\n", $enc = null) | |
{ | |
if ($enc === null) { | |
$enc = mb_detect_encoding($str, mb_detect_order(), false); | |
} | |
$return = ''; | |
$strLength = mb_strlen($str, $enc); | |
for ($i = 0, $length = 0; $i < $strLength; $i++) { | |
$char = mb_substr($str, $i, 1, $enc); | |
$charWidth = (strlen($char) > 1) ? 2 : 1; | |
$length += $charWidth; | |
if ($length > $width) { | |
$return .= $break . $char; | |
$length = $charWidth; | |
} else { | |
$return .= $char; | |
} | |
} | |
return $return; | |
} | |
/** | |
* 文字列を改行で区切った配列に変換します。 | |
* 第二引数には 2 と 4 の組み合わせをフラグとして使用出来ます。 | |
* 2 は配列の各要素の最後に改行文字を追加しません。 | |
* 4 は空行を読み飛ばします。 | |
* | |
* @param string $str | |
* @param integer $flags = 0 | |
* @return array | |
*/ | |
public static function stringToArray($str, $flags = 0) | |
{ | |
if ((self::STRING_IGNORE_NEW_LINES & $flags) === self::STRING_IGNORE_NEW_LINES) { | |
$pattern = '/(.+?)(?:\r\n|\r|\n|$)/'; | |
} else { | |
$pattern = '/(.+?(?:\r\n|\r|\n|$))/'; | |
} | |
preg_match_all($pattern, strval($str), $matches); | |
if ((self::STRING_SKIP_EMPTY_LINES & $flags) === self::STRING_SKIP_EMPTY_LINES) { | |
return array_merge(array_diff($matches[1], array("\r", "\n", "\r\n", ""))); | |
} | |
return $matches[1]; | |
} | |
/** | |
* 特殊文字を HTML エンティティに変換する。 | |
* 配列が渡されたら、配列全体に適応される。 | |
* | |
* @param mixed $string | |
* @param integer $flag = ENT_QUOTES | |
* @param string $charset = 'UTF-8' | |
* @param boolean $doubleEncode = true | |
* @return mixed | |
*/ | |
public static function escape($string, $flags = ENT_QUOTES, $charset = 'UTF-8', $doubleEncode = true) | |
{ | |
if (is_array($string)) { | |
return array_map( | |
array(self, 'escape'), | |
$string, | |
array_fill(0, count($string), $flags), | |
array_fill(0, count($string), $charset), | |
array_fill(0, count($string), $doubleEncode) | |
); | |
} | |
$string = strval($string); | |
$func = self::$escapeFunction; | |
return $func($string, $flags, $charset, $doubleEncode); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment