Düzenli İfade Fonksiyonları

Merhabalar, birçok kez preg_match konusunda problem çektiğimiz için size tüm kaynaklardan alınmış açıklayıcı bir makale hazırlama ihtiyacı duydum

Öncelikle bu iki terimin ne olduğuna bakalım

<b>POSIX</b>, (Portable Operating System Interface for Unix) UNIX için Taşınabilir İşletim Sistemi Arabirimi.
<b>PCRE</b>, (Perl Compatible Regular Expressions) Perl Uyumlu Düzenli İfadeler

Öncelikle PHP 5.3.0 ile yayından kalkan POSIX ve yerine kullanılacak olan PCRE fonksiyonlarına bir gözatalım.

POSIX PCRE
ereg_replace () preg_replace ()
ereg () preg_match ()
eregi_replace () preg_replace ()
eregi () preg_match ()
split () preg_split ()
spliti () preg_split ()
sql_regcase () Eşdeğer Yok

Peki nedir bu preg fonksiyonları?

preg_grep Koşula uyan dizi elemanlarını seçer. Ör:
$fl_array = preg_grep("/^(\d+)?\.\d+$/", $array);
preg_match Regexp koşulunu metne uygular, sonuçlar diziye aktarılır. Ör:
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
preg_match_all İki boyutlu dizi kullanarak preg_match tan farklı olarak grup elemanlarını da ayırır. Ör:
preg_match_all("|<[^>]+>(.*)</[^>]+>|U",<br> "<b>example: </b><div align=left>this is a test</div>",<br> $out, PREG_PATTERN_ORDER);
preg_replace Bul değiştir işlemini regexp uygunluğuna göre yapar. Ör:
$string = 'April 15, 2003';<br> $pattern = '/(\w+) (\d+), (\d+)/i';<br> $replacement = '${1}1,$3';<br> echo preg_replace($pattern, $replacement, $string);
preg_replace_callback preg_replace’den farklı olarak değiştirme işleminde PHP fonksiyonunu kullanır. Bu durum çok daha kapsamlı değişim yapabilme olanağı sağlar.
preg_split Regexp uyumuna göre metni bölme işlemi yapar. Ör:
$keywords = preg_split("/[\s,]+/", "hypertext<br><br />
language, programming");

 

Array Walk Recursive Kullanımı

Array dizi içerisindeki verilere bazı php fonksiyonları (htmlspecialchars,trim,strip_tags vs) uygulanamaz. Bunun için array_walk_recursive kullanmak gerekir.

Örnek Kullanım:

(Not:Aşağıdaki örnekte tarayıcı html taglarını dizi içerisinde baskılamak için kullanılmıştır.)

<?php header('Content-type: text/html; charset=utf-8'); 

function filtre(&$value) {
 $value = htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}

$yazi="<b>örnek: </b><div align=left>bu bir denemedir</div>";
preg_match_all("|<[^>]+>(.*)</[^>]+>|U",$yazi,$cikti);

 
array_walk_recursive($cikti, "filtre");
print_r($cikti); 
?>

Çıktısı

Array
(
    [0] => Array
        (
            [0] => <b>örnek: </b>
            [1] => <div align=left>bu bir denemedir</div>
        )

    [1] => Array
        (
            [0] => örnek: 
            [1] => bu bir denemedir
        )

)

Türkiye Telefon Numarası Formatı ve Doğrulama

<html><head>
 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
 <script type="text/javascript" src="http://cloud.github.com/downloads/digitalBush/jquery.maskedinput/jquery.maskedinput-1.3.min.js"></script>
<script type="text/javascript">//<![CDATA[ 
$(window).load(function(){
$("#phone").mask("+?99 (999)-999-99-99");
$("#phone").on("blur", function() {
 var last = $(this).val().substr( $(this).val().indexOf("-") + 1 );
 
 if( last.length == 3 ) {
 var move = $(this).val().substr( $(this).val().indexOf("-") - 1, 1 );
 var lastfour = move + last;
 
 var first = $(this).val().substr( 0, 9 );
 
 $(this).val( first + '-' + lastfour );
 }
});
});//]]> 
</script>
</head>
<body>
<form action="" method="get">
 <input type="text" name="tel" id="phone" value="90">
 </form>
</body></html>

<?php
function tel($num) {
$nums=str_replace(array("+"," ","(",")","-"),array("00","","","",""),$num);
if(is_numeric($nums) AND strlen($nums) == 14){
return $num;
}else{
return false;
}
}
function num($num) {
$num=str_replace(array("+"," ","(",")","-"),array("00","","","",""),$num);
if(is_numeric($num) AND strlen($num) == 14){
$num = preg_replace('/[^0-9]/', '', $num);
return $num;
}else{
return false;
}
}
echo tel($_GET["tel"]);
echo "<br>";
echo num($_GET["tel"]);
?>

 

Askulator Oylama Sistemi Tarzında Daire Etrafında Daire Sıralama

http://jsfiddle.net/ThiefMaster/LPh33/4/

http://jsfiddle.net/nf7kA/

Yukarıdaki örnekleri olan işlemin php olarak hesaplaması:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
 <style type="text/css">
 .maincircle {
 position: absolute;
 }
 .inner {
 position: relative;
 width:290px;
 height:290px;
 border-radius: 50%;
 }
 .circle {
 position: absolute;
 width:35px;
 height:35px;
 border-radius: 50%;
 font-family: "Segoe UI", tahoma, sans-serif;
 font-size: 12px;
 text-align:center;
 vertical-align:middle;
 background-color: #bd1421;
 line-height: 3em;
 color:#fff;
 }
 </style>
</head>
<body>
 <div class="maincircle">
 <div class="inner">
 <?php 
 for($x=10;$x>-1;$x--){
 $borderfark=85;//değişebilir
 $kacabol=19;//değişebilir
 $angel=(($x*(360/$kacabol))+$borderfark);
 $radians=$angel*pi()/180;
 $innerdegeri=290;//değişebilir
 $radius=$innerdegeri/2;
 $left=(sin($radians)*$radius+$radius);
 $top=(cos($radians)*$radius+$radius);
 echo ' <div class="circle" style="margin-left:'.$left.'px;margin-top:'.$top.'px;">'.(10-$x).'</div>';
 }
 ?>
 </div>
 </div>
</body>
</html>

 

WordPress Besleme Kaynağı ile Bot Yapma

İstek üzerine daha önce yapmış olduğum bir örneği paylaşıyorum.

 <?php
$url = 'http://ulusanyazilim.com/feed/';

 $rss = new DOMDocument();
 $rss->load($url);
 $feed = array();
 foreach ($rss->getElementsByTagName('item') as $node) {
 $item = array (
 'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
 'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
 'pubDate' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue,
 'description' => $node->getElementsByTagName('description')->item(0)->nodeValue,
 'content' => $node->getElementsByTagName('encoded')->item(0)->nodeValue

 );
 array_push($feed, $item);
 }
 echo '<ul class="haberlistesi h4">';
 foreach($feed as $p){
 echo '<li>';
 echo '<img width="18" src="'.base_url().'img/product.gif" > 
 <a href="'.$p["link"].'" title="'.$p["title"].'" alt="'.$p["title"].'">
 '.$p["title"].'
 </a>';
 echo '</li>';
 }
 
 echo '</ul>';
?>

 

Html Karakter Sınırlandırma

$al=new cutHTML;
$al->text="<p><a>Merhaba</a></p>";
$al->lenght="5";
echo $al->write();
//Çıktısı "Merha"
class cutHTML {
 public $text="";
 public $length="";
public function write(){
 $this->text=htmlspecialchars_decode($this->text);
 $entities = array('À'=>'&Agrave;','à'=>'&agrave;','Á'=>'&Aacute;','á'=>'&aacute;','Â'=>'&Acirc;','â'=>'&acirc;',
 'Ã'=>'&Atilde;','ã'=>'&atilde;','Ä'=>'&Auml;','ä'=>'&auml;','Å'=>'&Aring;','å'=>'&aring;','Æ'=>'&AElig;','æ'=>'&aelig;',
 'Ç'=>'&Ccedil;','ç'=>'&ccedil;','?'=>'&ETH;','?'=>'&eth;','È'=>'&Egrave;','è'=>'&egrave;','É'=>'&Eacute;','é'=>'&eacute;',
 'Ê'=>'&Ecirc;','ê'=>'&ecirc;','Ë'=>'&Euml;','ë'=>'&euml;','Ì'=>'&Igrave;','ì'=>'&igrave;','Í'=>'&Iacute;','í'=>'&iacute;',
 'Î'=>'&Icirc;','î'=>'&icirc;','Ï'=>'&Iuml;','ï'=>'&iuml;','Ñ'=>'&Ntilde;','ñ'=>'&ntilde;','Ò'=>'&Ograve;','ò'=>'&ograve;',
 'Ó'=>'&Oacute;','ó'=>'&oacute;','Ô'=>'&Ocirc;','ô'=>'&ocirc;','Õ'=>'&Otilde;','õ'=>'&otilde;','Ö'=>'&Ouml;','ö'=>'&ouml;',
 'Ø'=>'&Oslash;','ø'=>'&oslash;','Œ'=>'&OElig;','œ'=>'&oelig;','ß'=>'&szlig;','?'=>'&THORN;','?'=>'&thorn;','Ù'=>'&Ugrave;',
 'ù'=>'&ugrave;','Ú'=>'&Uacute;','ú'=>'&uacute;','Û'=>'&Ucirc;','û'=>'&ucirc;','Ü'=>'&Uuml;','ü'=>'&uuml;','?'=>'&Yacute;',
 '?'=>'&yacute;','Ÿ'=>'&Yuml;','ÿ'=>'&yuml;');
 foreach ($entities as $key => $value){$ent[] = $key;$html_ent[] = $value;}
 $this->text = str_replace( $html_ent, $ent, $this->text );
 $this->text=strip_tags($this->text);
 $this->text=substr($this->text, 0, $this->length);
 $this->text=htmlspecialchars($this->text);
 return $this->text;
 }
}

Touch ile UTF-8 Bom’suz Php Dosyası Oluşturmak

Hem ANSI hem UTF8 dosya kodlaması üzerinde çalıştırılıp doğruluğu kanıtlanmıştır.

<?php 
function phpfilemaker($filename){
 ini_set('default_charset','UTF-8');
 header('Content-Type: text/html; charset=UTF-8');
 touch ($filename.".php");
 $islem=fopen($filename.".php",'a');
 fputs($islem,'<?php ?>');
 fclose($islem);
 return true;
}
phpfilemaker("a");
?>

 

Htmlspecialchars ENT_QUOTES ile Sorgu Güvenliği

‘ ” > < gibi özel xss ve sql injection açıklarını önlemek için karakterleri unicode karakterlere çevirir.Örn: Türkiye’de => Türkiye&#39;de

<?php mysql_query("UPDATE is SET veri='".htmlspecialchars($html,ENT_QUOTES)."' );

$_POST=htmlspecialchars($_POST,ENT_QUOTES);
$_GET=htmlspecialchars($_GET,ENT_QUOTES); 
?>