スポンサーサイト

  • 2009.06.05 Friday
  • -
  • -
  • -
  • by スポンサードリンク

一定期間更新がないため広告を表示しています


htmlspecialchars_decode ⇔ htmlspecialchars

前に書いた記事で、『&』,『"』,『'』,『<』,『>』の文字をそれぞれ、無害な文字(『&amp;』,『&quot;』,『&#039;』,『&lt;』,『&gt;』)に変換するhtmlspecialcharsがありました。
が、これとは逆に無害な文字(htmlエンティティ)を元の文字に戻す場合は以下の関数が必要です。

htmlspecialchars_decode($var, ENT_QUOTES);

というもの。
引数の使い方等は前記事のhtmlspecialcharsと同じです。

ちなみにこれに行き着く前は、str_replace関数で無理やり変換しようとしてました(ノ∀`)

PDOクラスについて

phpからDBへの接続についてですが、
php5から利用できる、データアクセス抽象化レイヤ(PDO)を使って接続する場合の記述です。
とりあえずメモしておきます。
ちなみに使用DBはmysqlです。

 $dsn = 'mysql:dbname=test;host=localhost';
 $user = 'test';
 $password = 'test';

 try {
  // DB接続確立
  $rec_db = new PDO($dsn, $user, $password);
  $rec_db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
  print('データベースへの接続を確立しました。');
  
  // DBの接続を切断
  unset($rec_db);
 }
 catch (PDOException $e){  // 接続失敗
  print('エラーメッセージ:'.$e->getMessage());
  die();
 }

上記のtry,catchで、DB接続のチェックをしていますが、
その中の new PDO($dsn, $user, $password); にて、接続を確立しています。
new PDOの中の引数は左から、
DBのへの接続文字列(DSNというらしい)、
DB接続に使用するユーザー、
DB接続に使用するパスワード、
になるそうです。

書いてある内容が意味不明だと思う方、もしくはもっと詳しく!と思う方はこちら

最近少しずつDB絡みをやっているのですが、久々すぎてわけが分からないですorz

特殊文字をhtmlエンティティに変換【htmlspecialchars】

フォームの入力の際、htmlタグやJavaScriptタグ等を入力してしまうと、その入力したhtmlやJavaScriptが実行されてしまうという現象がおこる(セキュリティ的によろしくない)ので、それを無効にする関数。

htmlspecialchars($var, ENT_QUOTES); というもの。

特殊文字(『<』『>』『&』『"』)をhtmlエンティティ(ただの安全な文字)に変換する関数だそうです。
さらに第二引数にENT_QUOTESを入れる事で、『'』も安全な文字に変換する事ができるそうです。

なんというか、色々ともっと精進しなきゃって感じですね。

改行文字→htmlの<br />タグへの変換

引き続き、PHPネタ。
フォームで入力したテキスト内容を、ユーザーが任意で改行したまま確認画面で表示っていうのがありますよね。

その場合は、nl2brという関数を使います。
改行文字(¥n)をhtmlの<br />タグに変換するというものです。

上記の関数を使わない場合、フォームに入力した内容を確認画面に表示する際
改行文字が認識されないので、改行されてない内容が画面に出てくるという事になります。

とりあえずサンプルはこちら

ちなみにソースは以下の通りです。
-----------------------------------------------------
<html>
<head><title>サンプル</title></head>
<body>
 <h1>文章を入力して下さい。</h1>
 <form action="text.php" method="post">
  <textarea cols="80" rows="10" name="text"></textarea><br />
  <input type="submit" value="確認" />
 </form>
 <?php
  $text = $_POST['text'];

  if($text == "") {
   print "入力内容がからっぽです。";
  }
  else {
   print nl2br($text);
  }
 ?>
</body>
</html>
-----------------------------------------------------
<br />を出力させたい文字列にnl2brを使います。
print nl2br(文字列変数); といった具合です。

ちなみにこのサンプルだと多分入力する文字列によっては変な文字が出現すると思うので、それはまた機会があったら、の予定です。

メールアドレスのチェックで正規表現のお勉強

少し(?)前ですが、PHPのサンプルフォームの作成でメールアドレスのチェックがあったので、ここで明記。

<?php
 // メールアドレスの入力エラー(空の場合)
 if($mail == "") {
  echo("<font color='#ff0000'>メールアドレスを入力してください。</font>");
  $mail = false;
 }
 else{ // 半角英数字以外の文字を入れた場合
  if (!preg_match('/^[a-zA-Z0-9][a-zA-Z0-9_¥.¥-]+?@[A-Za-z0-9_¥.¥-]+$/',$mail)) {
   //エラー
   echo("<font color='#ff0000'>メールアドレスが正しくありません。</font>");
   $mail = false;
  }
 }
?>

preg_matchは、正規表現によるマッチングを行う関数のこと。

preg_match("/パターン/", 調べる文字列) の形式。
上記の場合、調べる文字列は $mailという変数になる。

それで、問題は /パターン/ に該当する、 ^[a-zA-Z0-9][a-zA-Z0-9_¥.¥-]+?@[A-Za-z0-9_¥.¥-]+$ という表記。

これを正規表現で表すと、
^ …先頭から
[a-zA-Z0-9] …文字クラス(※半角英数字にマッチ)
[a-zA-Z0-9_¥.¥-] …文字クラス(※プログラム等で使う . と - のメタ文字を、その前に ¥ を置く事で、ただのハイフンとドットとしての扱いになる。)
+ …1回以上のパターンの繰り返し
? …0回から1回のパターン
$ …末尾から

となる。

…次回(があれば)につづく。