İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Sinema Dizi Akıllı Ev Motosiklet Mikromobilite Kripto Para Sağlık Teknolojileri Son dakika Yazarlar
  1. Ana sayfa
  2. SDN Forum
  3. Programlama
  4. Web Programlama (PHP, ASP, HTML, CSS, JavaScript)
Web Programlama (PHP, ASP, HTML, CSS, JavaScript)

String içerisinde karekter tanima sorunu (php)

mamanybono15.09.20122 cevap1.338 görüntüleme
#1
Merhabalar,

Şu anda CIDR formatındaki bi ip listesini veritabanına yazacak bi kod yazamaya çalışıyorum. Kodun bi parçası aşağıdaki gibi, bu aşağıdaki kodla şunu yapmaya çalışıyorum CIDR formatondaki(5.2.80.0/21 5.11.128.0/17) ip listesinden, her 3 üncü noktanın ve "/" karekterinin ve "boşluk" karekterinin yerini bi dizinin içine atmaya çalışıyorum. Kodları bi kaç kez kontrol ettim doğru mantıkla işliyolar gibi gözüküyor. Fakat bahsettiğim dizinin ilk bi kaç elemanını yazdırdığımda sırasıyla şu sonuçlar ortaya çıkıyor, 7,9,23 ve sonraki rakamalarda da yer yer yanlışlıl oluyor. Bu arada bu CIDR listesini bi text dökümanından kopyalayıp php sayfası üzerinde olan textarea özelliğiyle alıp $country_ip_range değişkenine ulaştırıyorum. Kodlarda hata bulamadım bende text dökümanının içini inceledim, şöyle bişey yaptım imleci text içeriğinin en başına getirdim, klavyedeki sağ ok tuşuyla tek tek atlamaya başladım, bütün karekterleri tek tuşlamayla atlıyorken boşlul karekterini 2 kez tuşlamayla atlıyor, txt dökümanındamı sorun var yoksa koddamı anlıyamadım. İlgili txt dökümanını http://www.ipaddresslocation.org/ip_ranges/get_ranges.php adresinden, alt tarafta bulunan country sekmesini turkey, output sekmesinide CIDR, seçerek elde edebilirsiniz. Yardımcı olursanız çok sevinirim. Teşekkürler.


$dot=0;
$reference_points=array();
$reference_points_index=1;

for($i=1;$i<=strlen(trim($country_ip_range));$i++){
if(substr(trim($country_ip_range),$i-1,1)=='.' && $dot<3){
$dot=$dot+1;

if($dot==3){
$reference_points[$reference_points_index]=$i;
$dot=0;
$reference_points_index=$reference_points_index+1;
}

}elseif(substr(trim($country_ip_range),$i-1,1)=='/'){
$reference_points[$reference_points_index]=$i;
$reference_points_index=$reference_points_index+1;

}elseif(substr(trim($country_ip_range),$i-1,1)=="&nbsp;"){
$reference_points[$reference_points_index]=$i;
$reference_points_index=$reference_points_index+1;
}
}
Cevaplar
Misafir
#2
Sorunumu çözdüm ben bahsettiğim sorunlu kodla şunu yapmaya çalışıyordu. CIDR formatındaki bahsettiğim yerlerin kaçıncı karakter olduklarını tespit edip sonra trim substring vebenzerei fonksiyonlarla O sintringi 5 ayrı numaraya bölecektim yani şöyleyken 5.2.80.0/21 şöyle 5 2 80 0 21 olcaktı. Bunuda mysql veritabanına kayıt edip sayfaya giren kullanıcının ip adresini alıp veri tabanıyla karşılaştırınca hangi ülkeden olduğunu tespit etmeye çalışacaktım. Fakat preg_match_all fonksiyonu varmış bi arkadaş anlattı sağolsun. Gitim bi 4 saat felan preg fonksiyonlarına ve regex lere çalıştım. olayı çözmeme yardımcı olan kodda aşağıdaki gibi.
<?php

$string = '5.2.80.0/21 5.11.128.0/17';

$pattern = '%(\d+)\.(\d+)\.(\d+)\.(\d+)/(\d+)%';
preg_match_all($pattern, $string, $matches, PREG_SET_ORDER);

var_dump($matches);

?>


ÇIKTI


array (size=2)
  0 => 
    array (size=6)
      0 => string '5.2.80.0/21' (length=11)
      1 => string '5' (length=1)
      2 => string '2' (length=1)
      3 => string '80' (length=2)
      4 => string '0' (length=1)
      5 => string '21' (length=2)
  1 => 
    array (size=6)
      0 => string '5.11.128.0/17' (length=13)
      1 => string '5' (length=1)
      2 => string '11' (length=2)
      3 => string '128' (length=3)
      4 => string '0' (length=1)
      5 => string '17' (length=2)
mamanybono Konuyu açan
#3
Sorunumu çözdüm ben bahsettiğim sorunlu kodla şunu yapmaya çalışıyordum. CIDR formatındaki bahsettiğim yerlerin kaçıncı karakter olduklarını tespit edip sonra trim substring vebenzerei fonksiyonlarla O sintringi 5 ayrı numaraya bölecektim yani şöyleyken 5.2.80.0/21 şöyle 5 2 80 0 21 olcaktı. Bunuda mysql veritabanına kayıt edip sayfaya giren kullanıcının ip adresini alıp veri tabanıyla karşılaştırınca hangi ülkeden olduğunu tespit etmeye çalışacaktım. Fakat preg_match_all fonksiyonu varmış bi arkadaş anlattı sağolsun. Gitim bi 4 saat felan preg fonksiyonlarına ve regex lere çalıştım. olayı çözmeme yardımcı olan kodda aşağıdaki gibi.
<?php

$string = '5.2.80.0/21 5.11.128.0/17';

$pattern = '%(\d+)\.(\d+)\.(\d+)\.(\d+)/(\d+)%';
preg_match_all($pattern, $string, $matches, PREG_SET_ORDER);

var_dump($matches);

?>


ÇIKTI


array (size=2)
  0 => 
    array (size=6)
      0 => string '5.2.80.0/21' (length=11)
      1 => string '5' (length=1)
      2 => string '2' (length=1)
      3 => string '80' (length=2)
      4 => string '0' (length=1)
      5 => string '21' (length=2)
  1 => 
    array (size=6)
      0 => string '5.11.128.0/17' (length=13)
      1 => string '5' (length=1)
      2 => string '11' (length=2)
      3 => string '128' (length=3)
      4 => string '0' (length=1)
      5 => string '17' (length=2)

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.