Il linguaggio PHP è stato utilizzato attivamente tra gli sviluppatori web per molti anni. Come in ogni linguaggio software, PHP presenta best practice ed errori/abusi poco conosciuti. In questa lezione PHP strpos() Parleremo di come utilizzare al meglio la sua funzione e di informazioni poco conosciute.

Non confrontare con Vero

nel linguaggio PHP strpos() la funzione restituisce la posizione iniziale del testo cercato. strpos() Quando utilizziamo la funzione durante la ricerca se l'obiettivo viene trovato nel testo, quando viene trovato l'obiettivo 1, quando non trovato 0 restituisce il codice. Se l'obiettivo è stato trovato all'inizio del testo cercato, 0 ritorna. Questo non è esattamente un bug in PHP, ma di conseguenza, quando viene cercata la presenza del testo di destinazione nella query if scritta come nell'esempio seguente, il testo di destinazione è all'inizio. 0 Causerà un errore nel software perché restituirà .

Esempio:

$data = "Onur Özden Web Çözümleri";
$search = "Onur";

if (strpos($data, $search) === true) {
    echo "Metinde '{$search}' ifadesi geçiyor";
} else { // Bu blok çalışacak
    echo "Metinde '{$search}' ifadesi geçmiyor";
}
// Çıktı: Metinde 'Onur' ifadesi geçmiyor

Nell'esempio, il blocco else ha funzionato. Questo è sbagliato! Perché il nome "Onur" è menzionato nel testo utilizzato nell'esempio. Questo è perché strpos() Nella funzione, se il testo cercato è all'inizio dei dati, la funzione si chiama "0 è restituire la risposta. Allora come possiamo superare questo problema? Dobbiamo usare una funzione diversa? No. Non ce n'è bisogno. Esiste una soluzione molto semplice a questo problema. Esaminiamo l'esempio e lo dettagliamo.

$data = "Onur Özden Web Çözümleri";
$search = "Onur";

if (strpos($data, $search) !== false) { // Bu blok çalışacak
    echo "Metinde '{$search}' ifadesi geçiyor";
} else {
    echo "Metinde '{$search}' ifadesi geçmiyor";
}
// Çıktı: Metinde 'Onur' ifadesi geçiyor

In questo esempio, il confronto nel blocco if ha funzionato correttamente. Il motivo è che tutti i linguaggi di programmazione più diffusi, incluso PHP, e persino la logica del software 0 valore false, 1 valore true è considerato come. Poiché il valore restituito è 0, quando viene effettuato un confronto di tipo booleano nel blocco if, il valore 0 viene elaborato come falso e si verifica questo errore.

Utilizzare il confronto rigoroso quando si confronta con Falso

C'è un altro dettaglio molto importante a cui dobbiamo prestare attenzione nell'esempio precedente. Se effettuiamo un confronto sull'uguaglianza (confronto sciolto) anziché un confronto rigoroso, incontreremo nuovamente lo stesso errore. Poiché il confronto di uguaglianza non mette in discussione il tipo di dati, il confronto di equivalenza mette in discussione anche il tipo di dati. Esaminiamo un esempio errato di ciò di cui stiamo parlando. Facciamo un esempio senza confronto di equivalenze e vediamo il risultato

$data = "Onur Özden Web Çözümleri";
$search = "Onur";

if (strpos($data, $search) != false) {
    echo "Metinde '{$search}' ifadesi geçiyor";
} else { // Bu blok çalışacak
    echo "Metinde '{$search}' ifadesi geçmiyor";
}
// Çıktı: Metinde 'Onur' ifadesi geçmiyor

Possiamo gestire la distinzione tra maiuscole e minuscole

Per impostazione predefinita, la funzione strpos() fa distinzione tra maiuscole e minuscole. Se vogliamo rimuovere questa sensibilità dobbiamo utilizzare la funzione stripos(). Diamo un'occhiata ad un esempio della funzione stripos():

$data = "Onur Özden Web Çözümleri";
$search = "onur";

if (stripos($data, $search) !== false) {  // Bu blok çalışacak
    echo "Metinde '{$search}' ifadesi geçiyor";
} else {
    echo "Metinde '{$search}' ifadesi geçmiyor";
}
// Çıktı: Metinde 'Onur' ifadesi geçiyor

Possiamo verificare se il testo cercato si verifica più di una volta con la funzione strpos()

1° esempio:

Possiamo verificare quante volte il testo di destinazione appare nei dati con la funzione strpos(). Nel primo esempio mostreremo il modo creativo ma più semplice ed elementare per farlo, mentre nel secondo esempio mostreremo il modo migliore, che è molto più pratico.

$data = "Onur Özden Web Çözümleri, Onur Özden tarafından kurulmuştur. Onur Özden ve ekibi ile web yazılım geliştirme, wordpress teknik destek ve seo hizmetleri sunar.";
$search = "Onur";

// undefined hatası almamak için değişkenleri tanımla ve varsayılan olarak 0 değerini ver;
$position = 0;
$count = 0;

while (($position = strpos($data, $search, $position)) !== false) {
    $count++; // Kaçıncı kez geçtiğini say
    $position++; // Sonraki arama için pozisyonu artır

}

// Sonucu yazdır
echo "Veri içerisinde toplam {$count} adet '{$search}' kelimesi geçiyor<br>";

// Çıktı: Veri içerisinde toplam 3 adet 'Onur' kelimesi geçiyor

2° esempio:

$data = "Onur Özden Web Çözümleri, Onur Özden tarafından kurulmuştur. Onur Özden ve ekibi ile web yazılım geliştirme, wordpress teknik destek ve seo hizmetleri sunar.";
$search = "Onur";

// substr_count fonksiyonu ile $search ifadesinin $data içindeki toplam sayısını hesapla
$count = substr_count($data, $search);

// veri içerisinde hedef kelime geçmiyorsa "0 adet geçiyor" gibi anlamsız bir ifade çıktılanmaması için koşul
if ($count > 0) { // veride hedef ifade geçtiği için bu blok çalışacak
    echo "Veri içerisinde toplam {$count} adet '{$search}' kelimesi geçiyor";
} else {
    echo "Veri içerisinde '{$search}' kelimesi geçmiyor.";
}
// Çıktı: Veri içerisinde toplam 3 adet 'Onur' kelimesi geçiyor

substr_count() In breve, la funzione calcola quanti sottotesti vengono passati nel target e quante volte. Potete trovare la documentazione dettagliata ed esempi di questa funzione qui -> https://www.php.net/manual/function.substr-count.php

Informazioni su strpos()

In questo articolo strpos() Abbiamo imparato ad utilizzare al meglio la sua funzione e a correggere gli abusi più comuni. strpos() con la sua funzione stripos() e substr_count() Abbiamo anche conosciuto le loro funzioni. Resta sintonizzato per il resto della nostra serie sugli approcci alla codifica di migliore qualità.