Hatena::ブログ(Diary)

放置のネタ帳。 このページをアンテナに追加 RSSフィード

2009-01-09

機種依存文字の置換え

sjisでの置換え。

	/**
	 * 機種依存文字置換
	 * 
	 * @access public
	 * @param string	$str		対象文字列
	 * @param string	$chg_str	置換文字列
	 * @return string	置換結果
	 */
	function replaceText($str,$chg_str=NULL){
		$flag = false;
		$rtn = false;
		$str2 = NULL;

	    // 13区 0x8740〜0x879F
		// NEC-IBM拡張 0xED40〜0xEEFC
		// IBM拡張 0xFA40〜0xFC4B
		// 外字 0xF040〜F9FC
		// Mac機種依存文字 0x8540〜0x889E
		// Mac外字および縦組用 0xEAA5〜0xFCFC
		$pattern = "/(?:[\x87][\x40-\x9F]|[\xED-\xEE][\x40-\xFF]|[\xFA-\xFB][\x40-\xFF]|[\xFC][\x40-\x4B]|[\xF0-\xF9][\x40-\xFF]|[\x85-\x88][\x40-\x9E]|[\xEA-\xFC][\xA5-\xFC])/";

		for($cnt1=0; $cnt1<mb_strlen($str); $cnt1++){
			$bit = mb_substr($str,$cnt1,1);
		    if(preg_match($pattern,$bit,$matches,PREG_OFFSET_CAPTURE)) $flag = true;
			$bit = preg_replace($pattern,$chg_str,$bit);
			$str2 .= $bit;
		}

		if($flag) $rtn = $str2;
		return $rtn;
	}