LA CAMPANA

C'è chi ha letto questa notizia prima di te.
Iscriviti per ricevere gli ultimi articoli.
E-mail
Nome
Cognome
Come vuoi leggere The Bell
Niente spam

Le espressioni regolari sono uno strumento molto utile per gli sviluppatori. Con il loro aiuto, puoi trovare, definire o sostituire testo, parole o altri caratteri. L'articolo di oggi ha raccolto 15 delle espressioni regolari più utili di cui ogni sviluppatore web avrà bisogno.

Introduzione alle espressioni regolari

Molti sviluppatori alle prime armi trovano le espressioni regolari molto difficili da comprendere e utilizzare. In effetti, tutto non è così complicato come potrebbe sembrare. Prima di passare direttamente alle espressioni regolari, con il loro codice utile e versatile, diamo uno sguardo alle basi:

Sintassi delle espressioni regolari

Espressione regolare Si intende
foo La stringa "foo"
^ foo La riga inizia con "foo"
foo $ La riga termina con "foo"
^ foo $ "Foo" compare solo una volta per riga
a, b o c
qualsiasi carattere minuscolo
[^ A-Z] qualsiasi carattere non maiuscolo
(gif | jpg) Significa sia "gif" che "jpeg"
+ Uno o più caratteri minuscoli
Qualsiasi cifra, punto o segno meno
^{1,}$ Qualsiasi parola, almeno una lettera, un numero o _
()() wy, wz, xy o xz
(^ A-Za-z0-9) Qualsiasi carattere (non un numero o una lettera)
({3}|{4}) Significa tre lettere o 4 numeri

Funzioni PHP per espressioni regolari

Funzione Descrizione
preg_match () La funzione preg_match () cerca una stringa in base a un determinato modello, restituisce true se la stringa viene trovata e false, altrimenti
preg_match_all () La funzione Preg_match_all () trova tutte le occorrenze di una stringa con pattern
preg_replace () La funzione preg_replace () funziona allo stesso modo di ereg_replace (), tranne per il fatto che le espressioni regolari possono essere utilizzate sia per specificare il modello di ricerca che per la stringa con cui sostituire il valore trovato.
preg_split () La funzione preg_split () è la stessa di split (), tranne che un'espressione regolare può essere utilizzata come parametro per un modello di ricerca.
preg_grep () La funzione preg_grep () cerca tutti gli elementi dell'array di input, restituendo tutti gli elementi che corrispondono a un modello di espressione regolare.
preg_quote () Esegue l'escape dei caratteri delle espressioni regolari

Controllo del nome di dominio

Verifica se la stringa è il nome di dominio corretto

$ url \u003d "http://komunitasweb.com/"; if (preg_match ("/^(http|https|ftp)://(*(?:.*)+):?(d+)?/?/i", $ url)) (echo "Il tuo URL è ok . ";) else (echo" URL errato. ";)

Evidenziazione delle parole nel testo

Questa è un'espressione regolare molto utile, puoi usarla per trovare la parola desiderata ed evidenziarla. Particolarmente utile per visualizzare i risultati di ricerca.

$ text \u003d "Esempio di frase da KomunitasWeb, regex è diventato popolare nella programmazione web. Ora impariamo regex. Secondo wikipedia, le espressioni regolari (abbreviate come regex o regexp, con forme plurali regex, regexps o regexen) sono scritte in modo formale linguaggio che può essere interpretato da un processore di espressioni regolari "; $ text \u003d preg_replace ("/ b (regex) b / i", " 1", $ testo); echo $ testo;

Evidenziazione dei risultati di ricerca in un blog WordPress

Come accennato nell'esempio precedente, questo esempio di codice è utile per i risultati di ricerca e c'è un ottimo modo per implementare questa funzionalità in un blog wordpress.

Apri il tuo file search.php e trova la funzione the_title (). Sostituiscilo con il codice seguente:

Echo $ title;

Ora, sopra questa riga, aggiungi questo codice:

\0", $ title);?\u003e

Salva il file search.php e apri style.css. Aggiungi la seguente riga:

Strong.search-excerpt (background: yellow;)

Recupero di tutte le immagini da un documento HTML

Se hai mai avuto bisogno di ottenere tutte le immagini da una pagina web, questo codice dovrebbe essere lì.Puoi facilmente creare un uploader di immagini usando le funzionalità cURL

$ immagini \u003d array (); preg_match_all ("/ (img | src) \u003d (" | \\ ") [^" \\ "\u003e] + / i", $ data, $ media); unset ($ data); $ data \u003d preg_replace ("/ (img | src) (" | \\ "| \u003d" | \u003d \\ ") (. *) / i", "$ 3", $ media); foreach ($ data as $ url) ($ info \u003d pathinfo ($ url); if (isset ($ info ["extension"])) (if (($ info ["extension"] \u003d\u003d "jpg") || ($ info ["extension"] \u003d\u003d "jpeg") || ($ info ["extension"] \u003d\u003d "gif") || ($ info ["extension"] \u003d\u003d "png")) array_push ($ immagini, $ url);))

Rimuovi le parole duplicate (senza distinzione tra maiuscole e minuscole)

Durante la digitazione, le parole si ripetono spesso? Questa espressione regolare aiuterà.

$ text \u003d preg_replace ("/ s (w + s) 1 / i", "$ 1", $ text);

Rimozione della punteggiatura duplicata

Lo stesso, solo per la punteggiatura. Dì addio alle doppie virgole.

$ text \u003d preg_replace ("/.+/ i", ".", $ text);

Cerca tag XML / HTML

Questa è una semplice funzione che accetta due argomenti. Il primo è il tag che devi trovare e il secondo è una variabile contenente XML o HTML. Di nuovo, questa funzione è molto comoda da usare con cURL.

Funzione get_tag ($ tag, $ xml) ($ tag \u003d preg_quote ($ tag); preg_match_all ("(<".$tag."[^>]*>(.*?). ")", $ xml, $ corrisponde, PREG_PATTERN_ORDER); restituire $ corrispondenze; )

Ricerca di tag XHTML / XML con un valore di attributo specifico

Questa funzione è molto simile alla precedente, tranne per il fatto che puoi dare al tag l'attributo desiderato. Ad esempio, puoi facilmente trovare

.

Funzione get_tag ($ attr, $ value, $ xml, $ tag \u003d null) (if (is_null ($ tag)) $ tag \u003d "\\ w +"; else $ tag \u003d preg_quote ($ tag); $ attr \u003d preg_quote ($ attr); $ value \u003d preg_quote ($ value); $ tag_regex \u003d "/<(".$tag.")[^>] * $ attr \\ s * \u003d \\ s * "." (["\\"]) $ valore \\\\ 2 [^\u003e] *\u003e (. *?)<\/\\1>/ "preg_match_all ($ tag_regex, $ xml, $ corrisponde, PREG_PATTERN_ORDER); restituisce $ corrispondenze;)

Trovare valori di colore esadecimali

Un altro strumento utile per gli sviluppatori web! Ti permette di trovare / controllare il valore del colore esadecimale.

$ stringa \u003d "# 555555"; if (preg_match ("/ ^ # (? :(? :( 3)) (1,2)) $ / i", $ string)) (echo "esempio 6 riuscito.";)

Cerca nel titolo dell'articolo

Questo snippet di codice troverà e visualizzerà il testo all'interno dei tag , nella pagina html.

$ fp \u003d fopen ("http://www.catswhocode.com/blog", "r"); while (! feof ($ fp)) ($ pagina. \u003d fgets ($ fp, 4096);) $ titre \u003d eregi (" (.*)", $ page, $ regs); echo $ regs; fclose ($ fp);

Analisi dei registri di Apache

La maggior parte dei siti viene eseguita sul noto server Web Apache. Se il tuo sito è uno di questi, perché non utilizzare PHP ed espressioni regolari per analizzare i log di Apache?

// Log: server web Apache // Solo successi ai file HTML. Utile per contare il numero di visualizzazioni di pagina. "^ ((? # IP client o nome dominio) S +) s + ((? # autenticazione di base) S + s + S +) s + [((? # data e ora) [^]] +)] s +" (?: GET | POST | HEAD) ((? #File) / [^? "] +?. Html?) ?? ((? # Parameters) [^?"] +)? HTTP / + "s + (? # Codice di stato) 200s + ((? # Byte trasferiti) [- 0-9] +) s +" ((? # Referrer) [^ "] *)" s + "((? # User agent ) [^ "] *)" $ "// Log: server web Apache // solo errori 404" ^ ((? # IP client o nome dominio) S +) s + ((? # Autenticazione di base) S + s + S +) s + [((? # data e ora) [^]] +)] s + "(?: GET | POST | HEAD) ((? #file) [^?"] +) ?? ((? # parametri) [ ^? "] +)? HTTP / + "s + (? # Codice di stato) 404s + ((? # Byte trasferiti) [- 0-9] +) s +" ((? # Referrer) [^ "] *)" s + "((? # User agent ) [^ "] *)" $ "

Sostituzione di virgolette doppie con virgolette intelligenti

Se sei un amante della tipografia, adorerai questa espressione regolare che sostituisce le virgolette doppie regolari con virgolette intelligenti. Un'espressione regolare simile viene utilizzata da wordpress nel contenuto della pagina.

Preg_replace ("B" b ([^ "x84x93x94rn] +) b" B ","? 1? ", $ Text);

Controllo della password complesso

Questa regex farà in modo che almeno sei caratteri, numeri, trattini e trattini bassi siano inseriti nella casella di testo.

La casella di testo deve contenere almeno una maiuscola, una minuscola e un numero.

"A (? \u003d [-_ a-zA-Z0-9] *?) (? \u003d [-_ a-zA-Z0-9] *?) (? \u003d [-_ a-zA-Z0-9] *?) [-_a-zA-Z0-9] (6,) z "

WordPress: utilizzo di un'espressione regolare per ottenere immagini da un post

Poiché molti di voi sono utenti di WordPress, potrebbe essere necessario un codice che consenta di ottenere tutte le immagini dal testo dell'articolo e visualizzarle.

Per utilizzare questo codice, incollalo in qualsiasi file del tuo tema.

post_content; $ szSearchPattern \u003d "~ ] * /\u003e ~ "; // Esegui preg_match_all per catturare tutte le immagini e salvare i risultati in $ aPics preg_match_all ($ szSearchPattern, $ szPostContent, $ aPics); // Controlla se abbiamo almeno 1 immagine $ iNumberOfPics \u003d count ($ aPics); if ($ iNumberOfPics\u003e 0) (// Ora qui faresti tutto ciò che devi fare con le immagini // Per questo esempio le immagini sono visualizzate solo per ($ i \u003d 0; $ i< $iNumberOfPics ; $i++) { echo $aPics[$i]; }; }; endwhile; endif; ?>

Generazione di emoticon automatiche

Un'altra caratteristica utilizzata in wordpress è sostituire automaticamente le emoticon con un'immagine sorridente.

$ texte \u003d "Un testo con una faccina :-)"; echo str_replace (":-)", " ", $ texte);

Script di compleanno dell'uomo richiede un'attenzione speciale. Dopotutto, il sesso più forte di solito valuta il formato della vacanza in modo più rigoroso. La nostra vasta esperienza nella celebrazione delle feste ci consente di scegliere lo scenario ideale per un compleanno, a seconda dell'età, del carattere e degli interessi della persona che compie il compleanno. Ad esempio, offriamo uno scenario per il compleanno di un uomo che è più popolare tra i nostri clienti:

Il presentatore dice brindisi al festeggiato e finisce con le parole:

Versa lo champagne nei bicchieri
E insieme beviamo tutto fino in fondo!
Alziamo il nostro brindisi ai giovani,
E la giovinezza non è una!

Il primo cerchio è finito, ne è iniziato uno nuovo
Sei entrato nella tua seconda giovinezza.
L'uomo è prominente, forte e sano,
Sei pieno di nuove idee e forza.

Rimani energico lo stesso
Dopotutto, non hai lavorato invano per così tanti anni!
Sii così divertente, carino
E possa il destino proteggerti dai guai!

Gli ospiti si esibiscono per l'eroe dell'occasione vecchia storia d'amore zingara
(due possono cantare insieme e tutti gli altri raccolgono il ritornello):

I bicchieri vengono versati
Hanno un riflesso di ambra,
E i volti si illuminano
Come l'alba di primavera!

Il desiderio è portato via dal vino,
Diventa più luminoso
E un brindisi al cuore chiede:
Beviamo all'anniversario!

Coro:

Il nostro coro canta una vecchia melodia,
Versa lo champagne come un fiume!
Per te, nostro amato amico,
Il nostro festeggiato (forse il suo nome) è caro!

Cosa potrebbe esserci di più meraviglioso
Quando l'amore si scioglie
Sei accolto con una canzone
Famiglia e amici!

Che la serata abbia inizio
Com'è la vita un nuovo cerchio
E tutti i sogni diventano realtà
E tutto fiorisce intorno!

Coro:
Sottosopra! Sottosopra! Sottosopra!

Pausa musicale.

Quindi viene riconosciuto brindisi ai genitori.

Leader:

Bene, ora, amici, il momento è arrivato
Riempi un bicchiere per i tuoi genitori!
Per chi ha dato la gioia di vivere
E ha aperto le porte al bel mondo,

Per coloro che gli hanno insegnato la gentilezza
E ha consegnato il testimone del coraggio.
Per quelle grazie a chi, adesso
Il nostro festeggiato è seduto tra noi!

Quindi, beviamo ai genitori ... (li chiama per nome e patronimico)

Pausa musicale.

Il presentatore racconta brevemente la vita dell'eroe del giorno.

Presentatore: E ora canteremo "Vecchie canzoni sull'eroe principale delle nostre vacanze".

(Gli ospiti cantano sulle note della canzone sui piloti)


Senza un eroe del giorno, francamente, non c'è niente da fare.
Ci riuniremo a tavola
Versare bicchieri pieni
E canteremo una canzone per la sua salute:

È tempo per noi di festeggiare
E incontriamoci questo giorno

Lascia che non siano venti o trenta, lascia che sia!
Non abbassare l'asticella della tua allegria!
Seguiremo rigorosamente
Non puoi nasconderti da noi, lo sai e basta!

Vediamo il coraggioso, il coraggioso, il coraggioso
Un uomo snello, bello, dai capelli ricci!
Lascia che gli anni passino
Ma lo desideriamo sempre
La tua anima è rimasta giovane!

È tempo per noi di festeggiare
È tempo di festeggiare, celebrare un glorioso anniversario!
E incontriamoci questo giorno
In una grande compagnia di parenti e amici!

Lascia che il destino a volte sia crudele con noi, lascia che sia!
In risposta a lei, lasci andare le tue battute!
Mantieni lo stesso rigore
Non lasciatevi scoraggiare!

Stanotte, stanotte, stanotte
Non c'è niente da fare senza un caro eroe del giorno!
Ne berremo uno, ne berremo due
Per l'anniversario e per i fatti,
Ma non avere mal di testa domani!

Amiamo e rispettiamo l'eroe del giorno
E continuiamo le nostre congratulazioni!

(Gli ospiti cantano la melodia della canzone "I Can't You On Your Birthday ..."

Non possiamo te il giorno del tuo compleanno
Cara Mercedes, dai
Ma ti faremo un regalo, senza dubbio
E siamo pronti a ripetere cento volte:

Che sei gentile, allegro, attento
E nel mondo degli affari, uno specialista generalmente riconosciuto,
Che in generale sei meraviglioso con noi
E compagno, e marito e padre!

Leader:

Vogliamo sinceramente congratularci con te,
E correggi anche l'età nel passaporto,
Dopotutto, il tuo aspetto parla, il tuo sorriso,
Che errore per dieci anni sul passaporto!

(Gli ospiti cantano sulle note della canzone del soldato "Il sentiero è lontano con te e me ...")

Il festeggiato è un ragazzo coraggioso
Sembra un falco tra i ranghi!
Lo rispettiamo tutti di diritto
E in servizio, come in battaglia!

Coro:

________ (nome della persona che compie il compleanno) Vai! Mettiamoci in viaggio! Mettiamoci in viaggio!
Per arrivare a cento anni
E resta forte
Il destino ti sta chiamando!
________ (nome della persona che compie il compleanno) Avanti!

Caro eroe della giornata
Congratulazioni dal profondo dei nostri cuori!
Presentiamo sia la medaglia che il regalo
In segno dei suoi grandi meriti!

Coro.

L'eroe del giorno riceve un regalo e un ricordo memorabile medaglia con iscrizione: "Per ottimi servizi nel lavoro, amicizia e amore." (La medaglia può essere ritagliata dal legno e appesa al collo del festeggiato su un nastro

Concorso sul tema "Chi conosce meglio il festeggiato"!

L'uomo del compleanno stesso sarà il giudice.
Il presentatore pone domande e consegna i chip per le risposte corrette. Chi ha il maggior numero di gettoni alla fine del gioco riceve un premio con l'aftografo del festeggiato.

Pausa musicale.

Quiz di compleanno nei film

Cari amici! Proviamo a identificare l'ospite più erudito! Il tema, ovviamente, è sempre lo stesso: compleanno. Solo non nella vita, ma sullo schermo!

Per ogni risposta corretta o spiritosa, viene assegnato un gettone. In base ai risultati del quiz, viene assegnato un premio per il maggior numero di fiches. Ad esempio, una barretta di cioccolato. Se gli ospiti non riescono a indovinare, l'ospite dovrebbe dare un suggerimento, ricordare loro un po 'di questo film.

Domande e risposte comiche

Fai due sacchi di domande e risposte. In primo luogo, la persona annuncia a chi chiederà la domanda, disegna la domanda e la legge. Consegna un sacco di risposte a quello che ha nominato. Quindi quello nominato estrae la risposta e la legge. Quindi annuncia anche a chi farà la domanda, estrae la domanda e la legge. Eccetera.

Danza al comando del leader

Telegrammi di congratulazioni-indovinelli (anche da parte degli ospiti)

Il presentatore annuncia: Sono arrivati \u200b\u200btelegrammi di congratulazioni per Tanya, ma sono tutti non firmati. Devi indovinare il mittente. Sono persone conosciute da tutti, oltre che ospiti. E anche fantastici eroi!

Lascia che ti sussurrino all'orecchio l'amore!
La principessa dal soprannome ... Rana

Vorrei bere solo vini d'annata!
Buone vacanze a te! ... Malvina

Ti auguro di cantare più spesso con una chitarra!
Buona compagnia a te! ... Rotaru

Ti auguro di non incontrare un amore non pianificato!
Saluti a te musical da ... Bulanova

Live, seryozha, fun and cool!
Non dimenticare la tua infanzia! ... Regina

Ti auguro tanta musica e risate,
amore ed eterna giovinezza! ... Piekha

Lascia che ci siano sempre soldi per un fico!
E cosce di pollo! ... Baba Yaga

Visita il campo e la foresta più spesso!
Buona salute a te! ... Alsou

non permettere mai lo sconforto!
Un grande saluto da mamma! ... Orbokayte

Non entrare in situazioni di emergenza e sparatorie!
Ti auguro una lunga vita! Gruppo… Frecce

Colui che ha dato per primo la risposta corretta vengono premiati. Viene assegnato un premio per il maggior numero di fiches.

Riddle Lottery

Il premio viene assegnato a chi ha indovinato che tipo di oggetto ha nella borsa l'ospite. Puoi porre le domande principali del moderatore. Risponde "si" o "no".

Lotteria - previsioni

Tutti tirano fuori i biglietti o li prendono per uno scherzo, un aneddoto. Durante l'estrazione, il moderatore dice:
- Ora proveremo il destino e scopriremo cosa ha preparato per chi.
Distribuisce regali, a partire dal primo numero e legge le previsioni per il prossimo anno.

Prova "Disegna un animale inesistente"

Chiedi agli ospiti di disegnare un animale inesistente e di scrivere il suo nome.

Disegna un test sull'uomo

Devi disegnare una persona da 12 figure: devi usare tutte le figure: un cerchio e triangoli, quadrati. (Ce ne sono 12 in totale)

Alla fine della serata, puoi invitare gli ospiti ad aprire un conto in banca per la persona che compie gli anni. Quindi prendi un barattolo da 3 litri, dove tutti gli ospiti possono lanciarne una dozzina.

Di Ibrahim Diallo

Pubblicato il 2 luglio 2014 ~ 16 minuti di lettura

La ricerca è una caratteristica importante in un sito web. Quando i miei pochi lettori vogliono cercare un particolare passaggio sul mio blog, usano la casella di ricerca. Un tempo era alimentato da Ricerca Google, ma da allora l'ho cambiato con la mia versione fatta in casa non perché potessi fare di meglio, ma perché era una sfida interessante.

Se hai fretta e vuoi solo che il tuo sito sia ricercabile, fai quello che ho fatto prima, usa Google.

// Nel file search.php $ term \u003d isset ($ _ GET ["query"])? $ _ GET ["query"]: ""; $ term \u003d urlencode ($ term); $ website \u003d urlencode ("www.yourwebsite.com"); $ redirect \u003d "https://www.google.com/search?q\u003dsite%3A($website)+($term)"; header ("Posizione: $ redirect"); Uscita;

Quello che fa è piuttosto semplice. Ottieni il termine passato dall'utente e inoltralo alla pagina di ricerca di Google. Limita il risultato della ricerca al nostro dominio corrente utilizzando la parola chiave site: nella query di ricerca. Tutte le tue pagine indicizzate da Google saranno ora disponibili tramite la ricerca. Se invece vuoi gestire la tua ricerca internamente, continua a leggere.

Soluzione di ricerca fatta in casa

Prima di proseguire, prova a utilizzare la casella di ricerca su questo blog. Utilizza lo stesso processo che descriverò di seguito. Se ritieni che questo sia ciò che desideri, continua a leggere.

Questa soluzione è adatta a piccoli siti web. Uso LIKE con caratteri jolly su entrambe le estremità, il che significa che la tua ricerca non può essere indicizzata. Ciò significa che la soluzione funzionerà bene per il tuo blog o sito web personale che non contiene tonnellate di dati. Portalo su un sito web più grande e potrebbe diventare molto lento. MySQL offre la ricerca di testo completo che non è ciò che stiamo facendo qui.

Nota: Se hai 5000 post sul blog, stai comunque bene. ...

Prenderemo come riferimento la struttura di questo blog. Ogni post del blog ha:

  • Un titolo p_title
  • Un URL p_url
  • Un riepilogo p_summary
  • Un post contenuto p_content
  • E categorie categorie.tagname

Per ogni campo che corrisponde al nostro termine di ricerca, assegneremo un punteggio. Il punteggio sarà basato sull'importanza della partita:

// il termine esatto corrisponde si trova nel titolo $ scoreFullTitle \u003d 6; // corrisponde al titolo in parte $ scoreTitleKeyword \u003d 5; // il termine esatto corrisponde si trova nel riepilogo $ scoreFullSummary \u003d 5; // corrisponde al riepilogo in parte $ scoreSummaryKeyword \u003d 4; // il termine esatto corrisponde si trova nel contenuto $ scoreFullDocument \u003d 4; // corrisponde alla parte del documento $ scoreDocumentKeyword \u003d 3; // corrisponde a una categoria $ scoreCategoryKeyword \u003d 2; // corrisponde all'URL $ scoreUrlKeyword \u003d 1;

Prima di iniziare, ci sono alcune parole che non contribuiscono molto a una ricerca che dovrebbe essere rimossa. Esempio "in", "it", "a", "the", "of" .... Li escluderemo e ci sentiremo liberi di aggiungere qualsiasi parola che ritieni irrilevante. Un'altra cosa è che vogliamo limitare la lunghezza della nostra query. Non vogliamo che un utente scriva un romanzo nel campo di ricerca e mandi in crash il nostro server MySQL.

// Rimuove le parole non necessarie dal termine di ricerca e le restituisce come una funzione array filterSearchKeys ($ query) ($ query \u003d trim (preg_replace ("/ (\\ s +) + /", "", $ query)); $ words \u003d array (); // espandi questo elenco con le tue parole. $ list \u003d array ("in", "it", "a", "the", "of", "o", "I", "you", "lui", "me", "noi", "loro", "lei", "a", "ma", "quello", "questo", "quelli", "allora"); $ c \u003d 0; foreach (explode ("", $ query) as $ key) (if (in_array ($ key, $ list)) (continue;) $ words \u003d $ key; if ($ c\u003e \u003d 15) (break;) $ c ++ ;) return $ parole;) // limita le parole numero di caratteri funzione limitChars ($ query, $ limit \u003d 200) (return substr ($ query, 0, $ limit);)

Le nostre funzioni di supporto possono ora limitare il conteggio dei caratteri e filtrare le parole inutili. Il modo in cui implementeremo il nostro algoritmo è assegnando un punteggio ogni volta che troviamo una corrispondenza. Abbineremo le parole usando l'istruzione if e accumuleremo punti man mano che abbiniamo più parole. Alla fine possiamo usare quel punteggio per ordinare i nostri risultati

Nota: Non mostrerò come connettersi al database MySQL. Se hai problemi a connetterti in modo efficiente al database ti consiglio di leggere questo.

Diamo prima una struttura alla nostra funzione. Nota ho lasciato i segnaposto in modo da poter implementare le sezioni separatamente.

Funzione di ricerca ($ query) ($ query \u003d trim ($ query); if (mb_strlen ($ query) \u003d\u003d\u003d 0) (// non c'è bisogno di una ricerca vuota destra? Return false;) $ query \u003d limitChars ($ query) ; // Pesatura punteggi $ scoreFullTitle \u003d 6; $ scoreTitleKeyword \u003d 5; $ scoreFullSummary \u003d 5; $ scoreSummaryKeyword \u003d 4; $ scoreFullDocument \u003d 4; $ scoreDocumentKeyword \u003d 3; $ scoreCategoryKeyword \u003d 2; $ scoreUrlKeyword \u003d 1; $ parole chiave \u003d filter $ query); $ escQuery \u003d DB :: escape ($ query); // vedere la nota sopra per ottenere l'oggetto db $ titleSQL \u003d array (); $ sumSQL \u003d array (); $ docSQL \u003d array (); $ categorySQL \u003d array (); $ urlSQL \u003d array (); / ** Corrispondenza di occorrenze complete PLACE HOLDER ** / / ** Parole chiave corrispondenti PLACE HOLDER ** / $ sql \u003d "SELEZIONA p.p_id, p.p_title, p.p_date_published, p. p_url, p.p_summary, p.p_content, p.thumbnail, ((- Title score ".implode (" + ", $ titleSQL).") + (- Summary ".implode (" + ", $ sumSQL) . ") + (- document" .implode ("+", $ docSQL). ") + (- tag / category" .implode ("+", $ categorySQL). ") + (- url". implodere (" + ", $ urlSQL).")) come rilevanza FROM post p WHERE p.status \u003d "published" HAVING rilevance\u003e

Nella query, tutti i punteggi verranno sommati come variabile di pertinenza e possiamo usarli per ordinare i risultati.

Corrispondenza di occorrenze complete

Ci assicuriamo prima di avere alcune parole chiave, quindi aggiungiamo la nostra query.

If (count ($ keywords)\u003e 1) ($ titleSQL \u003d "if (p_title LIKE"% ". $ EscQuery."% ", ($ ScoreFullTitle), 0)"; $ sumSQL \u003d "if (p_summary LIKE"% " . $ escQuery. "%", ($ scoreFullSummary), 0) "; $ docSQL \u003d" if (p_content LIKE "%". $ escQuery. "%", ($ scoreFullDocument), 0) ";)

Quelle sono le partite con il punteggio più alto. Se il termine di ricerca corrisponde a un articolo che li contiene, avranno maggiori possibilità di apparire in primo piano.

Occorrenze di parole chiave corrispondenti

Eseguiamo un ciclo di tutte le parole chiave e controlliamo se corrispondono a uno dei campi. Per la corrispondenza di categoria, ho utilizzato una sottoquery poiché un post può avere più categorie.

Foreach ($ keywords as $ key) ($ titleSQL \u003d "if (p_title LIKE"% ". DB :: escape ($ key)."% ", ($ ScoreTitleKeyword), 0)"; $ sumSQL \u003d "if (p_summary LIKE "%". DB :: escape ($ key). "%", ($ ScoreSummaryKeyword), 0) "; $ docSQL \u003d" if (p_content LIKE "%". DB :: escape ($ key). "% ", ($ scoreDocumentKeyword), 0)"; $ urlSQL \u003d "if (p_url LIKE"% ". DB :: escape ($ key)."% ", ($ scoreUrlKeyword), 0)"; $ categorySQL \u003d "if ((SELECT count (category.tag_id) FROM category JOIN post_category ON post_category.tag_id \u003d category.tag_id WHERE post_category.post_id \u003d p.post_id AND category.name \u003d "" .DB :: escape ($ key). "")\u003e 0, ($ scoreCategoryKeyword), 0) ";)

Inoltre, come indicato da un commentatore di seguito, dobbiamo assicurarci che queste variabili non siano array vuoti o la query fallirà.

// In caso contrario, aggiungi 0 if (empty ($ titleSQL)) ($ titleSQL \u003d 0;) if (empty ($ sumSQL)) ($ sumSQL \u003d 0;) if (empty ($ docSQL)) ( $ docSQL \u003d 0;) if (vuoto ($ urlSQL)) ($ urlSQL \u003d 0;) if (vuoto ($ tagSQL)) ($ tagSQL \u003d 0;)

Alla fine le query vengono tutte concatenate e sommate per determinare la pertinenza del post rispetto al termine di ricerca.

// Rimuove le parole non necessarie dal termine di ricerca e le restituisce come una funzione array filterSearchKeys ($ query) ($ query \u003d trim (preg_replace ("/ (\\ s +) + /", "", $ query)); $ words \u003d array (); // espandi questo elenco con le tue parole. $ list \u003d array ("in", "it", "a", "the", "of", "o", "I", "you", "lui", "me", "noi", "loro", "lei", "a", "ma", "quello", "questo", "quelli", "allora"); $ c \u003d 0; foreach (explode ("", $ query) as $ key) (if (in_array ($ key, $ list)) (continue;) $ words \u003d $ key; if ($ c\u003e \u003d 15) (break;) $ c ++ ;) return $ parole;) // limite parole numero di caratteri funzione limitChars ($ query, $ limit \u003d 200) (return substr ($ query, 0, $ limit);) funzione ricerca ($ query) ($ query \u003d trim ($ query); if (mb_strlen ($ query) \u003d\u003d\u003d 0) (// non c'è bisogno di una ricerca vuota, giusto? return false;) $ query \u003d limitChars ($ query); // Pesatura dei punteggi $ scoreFullTitle \u003d 6; $ scoreTitleKeyword \u003d 5; $ scoreFullSummary \u003d 5; $ scoreSummaryKeyword \u003d 4; $ scoreFullDocument \u003d 4; $ scoreDocumentKeyword \u003d 3; $ scoreCategoryKeyword \u003d 2; $ scoreUrlKe yword \u003d 1; $ parole chiave \u003d filterSearchKeys ($ query); $ escQuery \u003d DB :: escape ($ query); // vedere la nota sopra per ottenere l'oggetto db $ titleSQL \u003d array (); $ sumSQL \u003d array (); $ docSQL \u003d array (); $ categorySQL \u003d array (); $ urlSQL \u003d array (); / ** Corrispondenza completa di occorrenze ** / if (count ($ parole chiave)\u003e 1) ($ titleSQL \u003d "if (p_title LIKE"% ". $ EscQuery."% ", ($ ScoreFullTitle), 0)"; $ sumSQL \u003d "if (p_summary LIKE"% ". $ escQuery."% ", ($ scoreFullSummary), 0)"; $ docSQL \u003d "if (p_content LIKE"% ". $ escQuery."% ", ($ scoreFullDocument), 0) ";) / ** Parole chiave corrispondenti ** / foreach ($ parole chiave come $ chiave) ($ titleSQL \u003d" if (p_title LIKE "%". DB :: escape ($ key). "%", ($ ScoreTitleKeyword ), 0) "; $ sumSQL \u003d" if (p_summary LIKE "%". DB :: escape ($ key). "%", ($ ScoreSummaryKeyword), 0) "; $ docSQL \u003d" if (p_content LIKE "% ".DB :: escape ($ key)."% ", ($ ScoreDocumentKeyword), 0)"; $ urlSQL \u003d "if (p_url LIKE"% ". DB :: escape ($ key)."% ", ( $ scoreUrlKeyword), 0) "; $ categorySQL \u003d" if ((SELECT count (category.tag_id) FROM category JOIN post_category ON post_category.tag_id \u003d category.tag_id WHERE post_category.post_id \u003d p.post_id AND category.name \u003d "". DB :: escape ($ key). "")\u003e 0, ($ scoreCategoryKeyword), 0) ";) // In caso contrario, aggiungi 0 if (empty ($ titleSQL)) ($ titleSQL \u003d 0; ) Se (vuoto ($ sumSQL)) ($ sumSQL \u003d 0; ) if (vuoto ($ docSQL)) ($ docSQL \u003d 0;) if (vuoto ($ urlSQL)) ($ urlSQL \u003d 0;) if (vuoto ($ tagSQL)) ($ tagSQL \u003d 0;) $ sql \u003d " SELEZIONA p.p_id, p.p_title, p.p_date_published, p.p_url, p.p_summary, p.p_content, p.thumbnail, (((- Title score ".implode (" + ", $ titleSQL). ") + (- Riepilogo" .implode ("+", $ sumSQL). ") + (- documento" .implode ("+", $ docSQL). ") + (- tag / categoria" .implode ("+", $ categorySQL). ") + (- url" .implode ("+", $ urlSQL). ")) come rilevanza FROM post p WHERE p.status \u003d" published "HAVING rilevance\u003e 0 ORDER BY rilevanza DESC, p.page_views DESC LIMIT 25 "; $ risultati \u003d DB :: query ($ sql); if (! $ risultati) (return false;) restituisce $ risultati; )

Ora il tuo file search.php può assomigliare a questo:

$ term \u003d isset ($ _ GET ["query"])? $ _ GET ["query"]: ""; $ search_results \u003d ricerca ($ term); if (! $ search_results) (echo "Nessun risultato"; exit;) // Stampa la pagina con i risultati qui.

Abbiamo creato un semplice algoritmo di ricerca in grado di gestire una discreta quantità di contenuti. Ho scelto arbitrariamente il punteggio per ogni partita, sentiti libero di modificarlo in qualcosa che funzioni meglio per te. E c'è sempre spazio per migliorare.

È una buona idea tenere traccia del termine di ricerca proveniente dai tuoi utenti, in questo modo puoi vedere se la maggior parte degli utenti cerca la stessa cosa. Se è presente uno schema, puoi salvare loro un viaggio e memorizzare nella cache i risultati utilizzando Memcached.

Se vuoi vedere questo algoritmo di ricerca in azione, vai avanti e prova a cercare un articolo nella casella di ricerca nella parte superiore della pagina. Ho aggiunto funzionalità extra come la restituzione della parte in cui è stata trovata la corrispondenza nel testo. Sentiti libero di aggiungere funzionalità al tuo.

Ti è piaciuto questo articolo? Puoi iscriverti per leggere altri fantastici. ...

In una nota correlata, ecco alcuni articoli interessanti.

Creare il tuo sito web non dovrebbe essere troppo difficile. Società di hosting come Godaddy o Hostgator rendono semplicissimo iniziare a chiunque; ti permettono di creare un intero sito web senza mai scrivere codice. Per la maggior parte delle persone, è sufficiente eseguire un Blog WordPress. Se questo è quello che stai cercando, dovresti andare su Godaddy.com adesso. Abbiamo finito qui. Ma d'altra parte, se vuoi avere il controllo e non essere limitato dalle carenze di un hosting condiviso senza spaccarti il \u200b\u200bportafoglio, sei nel posto giusto.

Vim è il mio editor di testo preferito sul terminale. Dopo aver giocato per un po 'con nano ed emacs, ho finalmente deciso con vim per la sua semplicità (nuda con me per favore). Sebbene possa essere personalizzato e utilizzato come un intero IDE, lo uso principalmente per modificare i file sui miei server e apportare modifiche piccole ma cruciali. Non entriamo in Editor war e cominciamo.

Gli sviluppatori esperti sono costosi. In un mondo in cui la riduzione dei costi sembra l'opzione migliore, le aziende cercano di massimizzare i propri profitti spendendo sempre meno in buoni talenti. È molto più economico assumere qualcuno che ha appena imparato php poche settimane fa e quindi uno sviluppatore esperto. Ma diventa un pessimo investimento quando il principiante introduce un codice non sicuro. Il problema è che molte cose apprese da questi tutorial sull'applicazione LAMP CRUD non si concentrano molto sulla sicurezza. Quando questo codice viene introdotto in un'applicazione commerciale, il danno può essere molto costoso. Mi piace il modo in cui gli utenti di stackoverflow stanno lottando molto duramente per sradicare l'iniezione SQL, ma sembra che sia molto più facile trovare codice insicuro online. Detto questo, cercherò di spaventarti in modo che tu sappia meglio qual è il costo di SQL injection.

Commenti (45)

Zaryel 12 agosto 2015:

Ian Mustafa 26 settembre 2015:

rapinare 29 settembre 2015:

adeem 11 febbraio 2016:

Ivan Venediktov 9 aprile 2016.

Aggiornato il 30 aprile 2016

Ti mostrerò come creare una ricerca semplice usando PHP e MySQL. Imparerai:

  • Come utilizzare i metodi GET e POST
  • Connetti al database
  • Comunica con il database
  • Trova voci di database corrispondenti a una determinata parola o frase
  • Visualizza i risultati

Preparazione

Ovviamente dovresti avere Apache, MySQL e PHP installati e funzionanti (puoi usarli per diverse piattaforme o WAMP per Windows, MAMP per mac) o un web server / hosting che supporti PHP e database MySQL.

Creiamo un database, una tabella e riempiamolo con alcune voci che possiamo usare per la ricerca:

  • Vai a phpMyAdmin, se hai un server sul tuo computer puoi accedervi da http: // localhost / phpmyadmin /
  • Crea database, ho chiamato mine tutorial_search
  • Crea tabella Ho usato 3 campi, ho chiamato i miei articoli.
  • Configurazione per 1 ° campo. Nome: id, tipo: INT, controlla AUTO_INCREMENT, indice: primario

INT significa che è intero
AUTO_INCREMENT significa che le nuove voci avranno un numero diverso (maggiore) rispetto al precedente
Indice: primario significa che è la chiave univoca utilizzata per identificare la riga

  • 2 ° campo: Nome: titolo, tipo: VARCHAR, lunghezza: 225

VARCHAR significa stringa di testo, massimo 225 caratteri (è necessario specificare la lunghezza massima), usalo per titoli, nomi, indirizzi
lunghezza significa che non può essere più lungo di 225 caratteri (puoi impostarlo su un numero inferiore se vuoi)

  • 3 ° campo: Nome: testo, tipo: TESTO

TESTO significa che è una stringa lunga, non è necessario specificare la lunghezza, usalo per il testo lungo.

  • Riempi la tabella con alcuni articoli casuali (puoi trovarli sui siti di notizie, ad esempio: CNN, BBC, ecc.). Fare clic su Inserisci nel menu in alto e copiare il testo in un campo specifico. Lascia vuoto il campo "id". Inserirne almeno tre.

Dovrebbe assomigliare a qualcosa di simile a questo:

  • Crea una cartella nella directory del tuo server e due file: index.php e search.php (in realtà possiamo fare tutto questo solo con un file, ma usiamone due, sarà più facile)
  • Riempili con markup html predefinito, doctype, head, ecc.

Ricerca

  • Crea un modulo con campo di ricerca e pulsante di invio in index.php, puoi utilizzare il metodo GET o POST, impostare l'azione su search.php. Ho usato "query" come nome per il campo di testo

OTTIENI - significa che le tue informazioni verranno memorizzate nell'URL (http: //localhost/tutorial_search/search.php? Query \u003d la tua domanda)
POST - significa che le tue informazioni non verranno visualizzate, vengono utilizzate per password, informazioni private, molto più sicure di GET

Ok, iniziamo con php.

  • Apri search.php
  • Avvia php ()
  • Connettiti a un database (leggi i commenti nel codice seguente)

< to > $ query \u003d mysql_real_escape_string ($ query); // si assicura che nessuno usi SQL injection $ raw_results \u003d mysql_query ("SELECT * FROM articoli WHERE (` title` LIKE "%". $ query. "%") OR (`text` LIKE"% ". $ query."% ")") o die (mysql_error ()); // * significa che seleziona tutti i campi, puoi anche scrivere: `id`,` title`, `text` // articoli è il nome della nostra tabella //"% $ query% "è quello che" stiamo cercando ,% significa qualsiasi cosa, ad esempio se $ query è Hello // corrisponderà a "hello", "Hello man", "gogohello", se vuoi una corrispondenza esatta usa `title` \u003d" $ query "// o se vuoi per trovare solo la parola intera in modo che "gogohello" sia fuori usa "% $ query%" ... OPPURE ... "$ query%" ... OR ... "% $ query" if (mysql_num_rows ($ raw_results)\u003e

". $ risultati [" titolo "]."

". $ risultati [" testo "]."

"; // pubblica i risultati ottenuti dal database (titolo e testo) puoi anche mostrare l'ID ($ risultati [" id "]))) altrimenti (// se non ci sono righe corrispondenti, segui echo" Nessun risultato ";)) else (// se la lunghezza della query è inferiore al minimo echo "La lunghezza minima è". $ min_length;)?\u003e

Fatto!

Ora funziona. Prova diverse parole, varianti, modifica del codice, sperimenta. Sto aggiungendo il codice completo di entrambi i file nel caso in cui pensi di esserti perso qualcosa. Sentiti libero di fare domande o chiedere tutorial.

index.php

Ricerca

search.php

Risultati di ricerca \u003d $ min_length) (// se la lunghezza della query è maggiore o uguale alla lunghezza minima, $ query \u003d htmlspecialchars ($ query); // cambia i caratteri utilizzati in html con i loro equivalenti, ad esempio:< to > $ query \u003d mysql_real_escape_string ($ query); // si assicura che nessuno utilizzi SQL injection $ raw_results \u003d mysql_query ("SELECT * FROM articoli WHERE (` title` LIKE "%". $ query. "%") OR (`text` LIKE"% ". $ query."% ")") o die (mysql_error ()); // * significa che seleziona tutti i campi, puoi anche scrivere: `id`,` title`, `text` // articoli è il nome della nostra tabella //"% $ query% "è quello che" stiamo cercando ,% significa qualsiasi cosa, ad esempio se $ query è Hello // corrisponderà a "hello", "Hello man", "gogohello", se vuoi una corrispondenza esatta usa `title` \u003d" $ query "// o se vuoi per trovare solo la parola intera in modo che "gogohello" sia fuori usa "% $ query%" ... OPPURE ... "$ query%" ... OR ... "% $ query" if (mysql_num_rows ($ raw_results)\u003e 0) (// se vengono restituite una o più righe, eseguire quanto segue mentre ($ results \u003d mysql_fetch_array ($ raw_results)) (// $ results \u003d mysql_fetch_array ($ raw_results) inserisce i dati dal database in un array, mentre è valido lo fa l'eco del ciclo "

". $ risultati [" titolo "]."

". $ risultati [" testo "]."

"; // pubblica i risultati ottenuti dal database (titolo e testo) puoi anche mostrare l'ID ($ risultati [" id "]))) altrimenti (// se non ci sono righe corrispondenti, segui echo" Nessun risultato ";)) else (// se la lunghezza della query è inferiore al minimo echo "La lunghezza minima è". $ min_length;)?\u003e

Il modo migliore per mantenere un utente su un sito è fargli trovare ciò che sta cercando. Se crei un sistema conveniente per questo, il livello di preferenza per il tuo sito crescerà e l'utente tornerà sicuramente per trovare ciò che gli interessa.

Ti mostrerò come creare un modulo di ricerca semplice, ma funzionalmente efficace, che verrà utilizzato per cercare gli articoli sul sito. I risultati appariranno sulla pagina senza ricariche, che è senza dubbio il modo migliore per presentare le informazioni.

Creerò 2 file: search.php che conterrà HTML e JavaScript. Il secondo file, do_search.php, conterrà il codice PHP. Cominciamo a creare il primo file:

PHP, demo di ricerca jQuery

Prova a digitare la parola ajax


risultati per

In questo file, abbiamo creato un normale file Modulo HTMLche invia una richiesta POST al file back end do_search.php.

select_list ($ sql); if (count ($ riga)) ($ end_result \u003d ""; foreach ($ riga come $ r) ($ risultato \u003d $ r ["titolo"]; $ grassetto \u003d " ". $ parola.""; $ end_result. \u003d"

  • ". str_ireplace ($ parola, $ grassetto, $ risultato)."
  • ";) echo $ end_result;) else (echo"
  • Nessun risultato è stato trovato per la tua ricerca.
  • "; } } ?>

    Il codice PHP contiene commenti con i quali puoi facilmente capire come funziona lo script. Se sono presenti corrispondenze nel database, le mostri al tuo utente, evidenziando in grassetto le parole che l'utente stava cercando.

    Diamo a tutto un po 'di CSS:

    Body (font-family: Arial, Helvetica, sans-serif;) * (margin: 0; padding: 0;) #container (margin: 0 auto; width: 600px;) a (color: # DF3D82; text-decoration: none) a: hover (color: # DF3D82; text-decoration: underline;) ul.update (list-style: none; font-size: 1.1em; margin-top: 10px) ul.update li (height: 30px; border-bottom: #dedede solid 1px; text-align: left;) ul.update li: first-child (border-top: #dedede solid 1px; height: 30px; text-align: left;) #flash (margin- top: 20px; text-align: left;) #searchresults (text-align: left; margin-top: 20px; display: none; font-family: Arial, Helvetica, sans-serif; font-size: 16px; color: # 000;) .word (font-weight: bold; color: # 000000;) #search_box (padding: 4px; border: solid 1px # 666666; width: 300px; height: 30px; font-size: 18px; -moz- border-radius: 6px; -webkit-border-radius: 6px;) .search_button (border: # 000000 solid 1px; padding: 6px; color: # 000; font-weight: bold; font-size: 16px; -moz- border-radius: 6px; -webkit-border-radius: 6px;) .found (font-weight: grassetto ; stile del carattere: corsivo; colore: # ff0000; ) h2 (margine destro: 70px;)

    Quindi hai imparato come creare un semplice modulo di ricerca che funzioni senza ricaricare la pagina. Spero ti sia piaciuto il tutorial.

    LA CAMPANA

    C'è chi ha letto questa notizia prima di te.
    Iscriviti per ricevere gli ultimi articoli.
    E-mail
    Nome
    Cognome
    Come vuoi leggere The Bell
    Niente spam