2010年2月11日木曜日

[php]Content-Type切り替え用クラス

最近のコンテンツタイプ切り替え用クラスでも晒してみる。

/**
* @author juner
* コンテンツタイプ用クラス。使い道ってあるのかな。
*/
class ContentsType{
static $patterns='/(\[|\]|\(|\)|\||\.|\|\*|\+|\^|\$)/i';
static $replacements='\\\\$1';
/**
* コンテンツタイプの配列[$types]を順に巡り、$_SERVER['HTTP_ACCEPT']に該当する物があった場合にその文字列を返す。
* @types コンテンツタイプの配列
* @return コンテンツタイプの文字列
*/
static public function checkHttpAccept($types){
if(is_array($types) && isset($_SERVER['HTTP_ACCEPT'])){
for($i=0,$max=count($types);$i<$max;$i++){
$pattern=preg_replace(self::$patterns,self::$replacements,$types[$i]);
if(ereg($pattern, $_SERVER["HTTP_ACCEPT"])) {
return $types[$i];
}
}
}else{
return false;
}
return false;
}
}

要は配列で渡したコンテンツタイプのリストを元に、$_SERVER['HTTP_ACCEPT']に該当するのがあるかをチェックして、該当するのがあったならばその文字列を返すって物である。配列内のどのコンテンツタイプにも該当しなかったらfalseを返すので要チェックではあるが……。

[php]最近使ってるサニタイズクラス。

というわけでjunerです。最近使ってるサニタイズクラスでもなんか載せてみようかと思う。クラスなのに単機能とはこれ如何に!

/**
* @author juner
* 文字列操作関連クラスそのうち実装増やす
*/
class Texts{
static $patterns=array('/&/i','/</i','/>/i','/"/i',"/'/i");
static $replacements=array('&amp;','&lt;','&gt;','&quot;','&#39;');
/**
* $patternsと$replacementsを調整する為の物。最初に一回やるだけで良い。
*/
static public function defsort(){
ksort(self::$patterns);
ksort(self::$replacements);
}
/**
* $strをサニタイジングする関数。
* @param $str サニタイジングされる文字列
* @return サニタイジングされた結果の文字列
*/
static public function sanitiz($str){
return preg_replace(self::$patterns,self::$replacements,$str);
}
}Texts::defsort();//順序を保証するために一度ソートする。

とりあえずこんな感じ。車輪の再発名な気がしてならないが……。

尚、使い方は以下の様になる

print Texts::sanitiz('文字列');

そんな感じ。

2010年1月24日日曜日

Xpath使うときによく使う個人的なclass……PersonalNamespaceContext

Xpathを使う時に使うNamespaceContextの拡張版のclass。多分誰でも考えつくとは思うが、これによって幾らでも必要な名前空間(Namespace)を追加出来る。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.xml.XMLConstants;
import javax.xml.namespace.NamespaceContext;
public class PersonalNamespaceContext implements NamespaceContext {
Map<String,String> pre=new HashMap<String,String>();
/**
* ネームスペースをセットする関数
* @param prefix 名前空間接頭辞
* @param uri 統一資源識別子
* @return
*/
public String setNameSpaceURI(String prefix,String uri){
return pre.put(prefix,uri);
}
public Map<String,String> setNameSpaceURIs(Map<String,String> am){
pre.putAll(am);return am;
}
public String getNamespaceURI(String prefix) {
String s=pre.get(prefix);
return s!=null?s:XMLConstants.NULL_NS_URI;
}
public String getPrefix(String uri) {
throw new UnsupportedOperationException();
}
public Iterator<?> getPrefixes(String uri) {
throw new UnsupportedOperationException();
}
}

使う時は以下の様な感じに使うと良い。

XPathFactory factory = XPathFactory.newInstance();
Xpath xpath = factory.newXPath();
PersonalNamespaceContext _x=new PersonalNamespaceContext();
_x.setNameSpaceURI("b","http://juner.net/data");
xpath.setNamespaceContext(_x);

setNameSpaceURIを使うことで動的に追加することが可能となる。まぁprivateなclass作る方が楽かも知れぬがこういう方法も有りということで。

2010年1月12日火曜日

[誤字修正]welcomじゃなくてwelcome

人に突っ込まれるまで気付かなかったスペルミス。半年近く気づいていなかったよ…。

そのうちサイトのデザイン一新(というかCMS導入)したいけれど就活きついので就職後に頑張る。

2010年1月1日金曜日

あけましておめでとうございます!

今年も良き一年になります様に頑張りますので、juners site 及び juners weblog を宜しくお願いします。