Toiminnot merkkijonojen käsittelyyn PHP:ssä. Merkkijonofunktiot PHP:n muuttuvan pituuden PHP:ssä

Ohjelmoijat joutuvat hyvin usein käsittelemään erilaisia ​​toimintoja työskennelläkseen merkkijonojen kanssa PHP:ssä. Kaikki toiminnot on esitetty erilaisissa hakuteoksissa, mutta haluaisin rajoittua vain tärkeimpiin.

PHP-funktio substr - saada osa merkkijonosta

Kun sinun on valittava tietynpituinen jakso tietystä paikasta alkavasta merkkijonosta, substr-funktio tulee apuun.Tässä funktiossa välitetään pilkuilla erotettuna: teksti, aloituspaikka ja merkkien lukumäärä. Viimeinen parametri on valinnainen, ja jos se puuttuu, funktion tuloksena on ote lähdetekstistä aloituskohdasta rivin loppuun.

PHP-funktio strlen - selvitä merkkijonon pituus

Tämä funktio palauttaa alkuperäisen merkkijonon pituuden kokonaislukuna.Tällä toiminnolla voit tarkistaa käyttäjän syöttämien tietojen pituuden tai ehkä jotain muuta.

PHP-toiminto trimmaa - poista ylimääräiset välilyönnit merkkijonon reunoista

Trimmaustoiminto poistaa kaikki välilyönnit merkkijonon reunoista, mukaan lukien rivinvaihtomerkin. On myös funktioita rtrim ja ltrim, jotka poistavat välilyönnit rivin lopusta tai alusta.

PHP-funktio strpos - etsii merkkijonoa

Strpos-funktio etsii osamerkkijonoa merkkijonosta ja, jos se onnistuu, palauttaa kyseisen osamerkkijonon alun sijainnin. Kun ensimmäinen osamerkkijono on löydetty, haku pysähtyy.Kuten ehkä arvasitkin, funktion argumenttien järjestys on seuraava: lähdemerkkijono, alimerkkijono, aloituspaikka. Kolmas parametri on valinnainen, mutta yritä muistaa, että se on olemassa.

PHP-toiminto strip_tags - poistaa HTML- ja PHP-tunnisteet merkkijonosta

Strip_tags-funktio palauttaa merkkijonon, josta on poistettu html- ja php-tunnisteet. Siitä on hyötyä sinulle, kun kirjoitat kommenttimoduulin sivustollesi, jotta hyökkääjät eivät jätä mahdollisuutta hakkeroida sivustoasi lomakkeen kautta.html Ja php täytyy poistaa"; echo strip_tags($text); echo strip_tags($text," ");//älä poista em-tageja ?> Toiminnon ensimmäinen argumentti on lähdeteksti ja toinen on tagit, joita ei pidä poistaa.

PHP-funktio strtolower - muuntaa merkkijonon pieniksi kirjaimille

PHP-funktio strtoupper - muuntaa merkkijonon isoiksi kirjaimille

Jos pidit tästä sivustosta hyödyllisenä, voit auttaa kehittämään sitä sijoittamalla

pituus merkeissä (7)

=> string(141) tarkoittaa, että $viesti on taulukko, joten sinun tulee tehdä strlen($message)< 141 ...

Minulla on merkkijono, joka on 141 merkkiä pitkä. Seuraavaa koodia käyttämällä minulla on if-lause palauttamaan viestin, jos merkkijono on suurempi tai pienempi kuin 140.

Libxml_use_internal_errors(TRUE); $dom = uusi DOMDocument(); $dom->loadHTMLFile($lähde); $xml = simplexml_import_dom($dom); libxml_use_internal_errors(FALSE); $viesti = $xml->xpath("//div[@class="contest"]"); if (strlen($viesti)< 141) { echo "There Are No Contests."; } elseif(strlen($message) >142) ( echo "On yksi aktiivinen kilpailu."; )

Käytin var_dump viestissä $message ja se näyttää string => string(141), se on minun ongelmani. Kun muutan if-lauseen numerot muotoon<130 и>131, se palauttaa silti ensimmäisen viestin, vaikka rivi on suurempi kuin 131. Riippumatta siitä, mitä numeroa käytän alle 141, saan aina "Ei kilpailua". tuli takaisin luokseni.

=> string(141) tarkoittaa, että $viesti on taulukko, ei merkkijono, ja $viesti on 141 merkkiä pitkä merkkijono

xpath ei palauta merkkijonoa. Se palauttaa taulukon, jossa on xml-elementtejä, jotka voidaan lähettää merkkijonoon.

If (count($message)) ( if (strlen((merkkijono)$viesti)< 141) { echo "There Are No Contests."; } else if(strlen((string)$message) >142) ( echo "On yksi aktiivinen kilpailu."; ) )

kokeile yleistä syntaksia sen sijaan:

Jos (strlen($viesti)<140) { echo "less than 140"; } else if (strlen($message)>140) ( kaiku "yli 140"; ) else ( echo "täsmälleen 140"; )

Koska $xml->xpath palauttaa aina joukko , strlen odottaa linja .

Minulla oli ongelmia tämän kanssa ja päätin lopulta luoda oman ratkaisuni. Ilman säännöllisen lausekkeen moottoria:

Funktio sisältää($teksti, $sana) ( $found = false; $spaceArray = explode(" ", $text); $nonBreakingSpaceArray = explode(chr(160), $text); if (in_array($word, $spaceArray) ) || in_array($word, $nonBreakingSpaceArray)) ( $found = true; ) palauttaa $löytyi; )

Saatat huomata, että edelliset ratkaisut eivät ole vastaus sanan käyttämiseen toisen sanan etuliitteenä. Käyttääksesi esimerkkiäsi:

$a = "Kuinka voit?"; $b = "vyötäröltä levenevä hame"; $c = "ovat";

Yllä olevissa esimerkeissä sekä $a että $b sisältävät $c , mutta haluat ehkä funktiosi kertovan, että vain $a sisältää $c .

Hei kaikille, tänään kerron teille kuinka saada selville merkkijonon pituus PHP:ssä. Aihe on melko helppo, koska kaikki tehdään puolestasi funktio nimeltä strlen. Se on yksinkertaista, funktio ottaa merkkijonon ja sen seurauksena palauttaa numeron, eli sinua kiinnostavan merkkijonon merkkien määrän. Katsotaanpa pientä esimerkkiä, jossa käytämme tätä toimintoa.

$string = "Jonon pituus";
$count = strlen( $string);
jos ( $count > 10 ) {
kaiku "Rivisi sisältää yli kymmenen merkkiä.";
}
elseif ($count == 10 ) {
kaiku "Rivissäsi on kymmenen merkkiä.";
}
muu(
kaiku "Rivisi on alle kymmenen merkkiä pitkä.";
}
?>

Kirjoitimme yksinkertaisen koodin, joka määrittää, kuinka monta merkkiä rivillä on, ja tulostamme sitten rivin, joka osoittaa merkit suhteessa kymmeneen. Ensimmäinen asia, jonka teimme, oli tulostaa merkkijono ja laittaa se muuttujaan. Loimme muuttujan, johon suoritustulos tallennetaan strlen-toiminnot, eli merkkien määrä. Ja avulla eteenpäin jos muuten rakentaa, määritämme merkkien määrän ja näytämme vastaavan rivin selaimessa. Jos rivillä on enemmän kuin kymmenen merkkiä, tulostetaan ensimmäinen rivi, jos täsmälleen kymmenen merkkiä, niin toinen rivi, muuten kolmas rivi tulostetaan, jos tuloste tehdään, merkkien määrä alle kymmenen, joten erityistä ehtoa ei määritelty. Siinä kaikki koodi, jonka kirjoitimme. Nyt kaikki on tullut sinulle erittäin selväksi, ja voit selvittää sen merkkien pituus merkkijonossa PHP:n avulla, milloin tahansa tarvitset, ja käytännössä tätä tarvitaan melko usein. Tällä sanon hyvästit sinulle, nähdään pian!

"Uudempaa sisäistä parametrien jäsennyssovellusliittymää on käytetty kaikissa PHP 5.3.x:n mukana toimitetuissa laajennuksissa. Tämä parametrien jäsennyssovellusliittymä saa funktiot palauttamaan NULL-arvon, kun ne välittävät yhteensopimattomia parametreja. Tähän sääntöön on joitain poikkeuksia, kuten get_class()-funktio. , joka palauttaa edelleen FALSE virheen sattuessa."

Joten PHP 5.3:ssa strlen($attributes) palauttaa NULL:n, kun taas PHP 5.2:ssa strlen($attributes) palauttaa kokonaisluvun 5. Tämä todennäköisesti vaikuttaa muihin toimintoihin, joten jos saat yhtäkkiä erilaisia ​​käyttäytymismalleja tai uusia virheitä, tarkista olet päivittänyt versioon 5.3 (jonka teimme äskettäin), ja tarkista sitten, onko lokeissasi varoituksia, kuten tämä:

strlen() odottaa parametrin 1 olevan merkkijono, joka annetaan rivillä /var/www/sis/lib/functions/advanced_search_lib.php rivillä 1028

Jos näin on, koet todennäköisesti tämän muuttuneen käyttäytymisen.

1 vuosi sitten

Jos tekstisi sisältää UTF8-merkin (esimerkiksi arabialainen merkki), mb_substr voi käyttää strlenin sijaan.
mutta jos merkkijono sisältää UTF16 (wmoji, hymiö), voit käyttää tätä menetelmää oikean pituuden saamiseksi:

Koska jotkut emojit (esim. 📌) on 2, 3 tai 4 tavua!

2 vuotta sitten

Kun tarkistat pituuden varmistaaksesi, että arvo sopii tietokantakenttään, muista käyttää oikeaa funktiota.

On kolme mahdollista tilannetta:

1. Todennäköisin tapaus: tietokantararake on UTF-8, jonka pituus on määritelty unicode-koodipisteissä (esim. mysql varchar(200) utf-8-tietokannassa).

// ok, jos php.ini default_charset on UTF-8 (= oletusarvo)
mb_strlen ($arvo);
iconv_strlen($arvo);
//aina ok
mb_strlen($arvo, "UTF-8");
iconv_strlen($arvo, "UTF-8");

// HUONO, älä käytä:
strlen(utf8_decode($arvo)); // taukoja joidenkin monitavuisten merkkien kohdalla
grafeme_strlen ($arvo); // laskee grafeemia, ei koodipisteitä
?>

2. Tietokantararakkeen pituus on määritelty tavuina (esim. Oracle:n VARCHAR2(200 BYTE))

// ok, mutta oletetaan, että mbstring.func_overload on 0 tiedostossa php.ini (= oletusarvo)
strlen ($arvo);
// ok, voimat lasketaan tavuina
mb_strlen ($arvo, "8bit")
?>

3. Tietokantararake on toisessa merkistössä (UTF-16, ISO-8859-1 jne.), jonka pituus on määritelty merkeissä / koodipisteissä.

Etsi käytetty merkistö ja välitä se nimenomaisesti pituusfunktiolle.

// ok, tuetut merkistöt:
mb_strlen ($arvo, $merkkisarja);
// ok, tuetut merkkisarjat: https://www.gnu.org/software/libiconv/
iconv_strlen ($arvo, $merkkisetti);
?>

6 vuotta sitten

PHP:n strlen-funktio käyttäytyy eri tavalla kuin C strlen-funktio nollatavujen ("\0") käsittelyssä.

PHP:ssä merkkijonon nollatavu EI lasketa merkkijonon lopuksi, ja kaikki nollatavut sisällytetään merkkijonon pituuteen.

Esimerkiksi PHP:ssä:

strlen("te\0st") = 5

C:ssä sama puhelu palaisi 2.

Siten PHP:n strlen-funktiota voidaan käyttää binäärimerkkijonon tavujen määrän löytämiseen (esimerkiksi base64_decoden palauttama binääritieto).

2 vuotta sitten

Tässä on PALJON väärää tietoa, jonka haluan korjata! Monet ihmiset ovat varoittaneet strlen():n käyttämisestä, koska se on "erittäin hidas". No, se oli luultavasti totta PHP:n vanhoissa versioissa. Mutta PHP7:stä lähtien se" ei todellakaan ole enää totta. Se on nyt SUPER nopeaa!

Loin 20 00 000 tavun merkkijonon (~ 20 megatavua) ja iteroin SADA MILJOONAA KERTAA silmukassa. Jokainen silmukaiteraatio teki uuden strlen():n tälle hyvin, hyvin pitkälle merkkijonolle.

Tulos: 100 miljoonaa strlen()-puhelua 20 megatavun merkkijonossa kesti vain yhteensä 488 millisekuntia. Ja strlen()-kutsut eivät hidastuneet/nopeammin, vaikka pienensin tai suurensin merkkijonoa. Strlen() oli melko pitkälti jatkuva-aikainen, supernopea operaatio

Joten joko PHP7 tallentaa jokaisen merkkijonon pituuden kenttään, josta se voi aina etsiä ilman merkkejä. Tai se tallentaa strlen()-tuloksen välimuistiin, kunnes merkkijonon sisältö todella muuttuu. Joka tapauksessa sinun ei pitäisi enää koskaan, KOSKAAN huolehtia strlen()-suorituskyvystä. PHP7:stä lähtien se on erittäin nopea!

Tässä on täydellinen vertailukoodi, jos haluat toistaa sen koneellasi:

$iteraatiot = 100000000 ; // 100 miljoonaa
$str = str_repeat ( "0" , 20000000 );

// benchmark-silmukka ja muuttujan määritys silmukan yleiskustannusten laskemiseksi
$aloitus = mikroaika(tosi);
for($i = 0 ; $i< $iterations ; ++ $i ) {
$len = 0 ;
}
$loppu = mikroaika(tosi);
$silmukka_kulunut = 1000 * ($loppu - $alku );

// benchmark strlen silmukassa
$len = 0 ;
$aloitus = mikroaika(tosi);
for($i = 0 ; $i< $iterations ; ++ $i ) {
$len = strlen ($str );
}
$loppu = mikroaika(tosi);
$strlen_elapsed = 1000 * ($loppu - $alku );

// vähennä silmukan yläraja strlen()-nopeuslaskelmasta
$strlen_elapsed -= $silmukka_kulunut ;

echo "\nmerkkijonon pituus: ( $len ) \ntesti kesti: ( $strlen_elapsed ) millisekuntia\n" ;

?>

5 vuotta sitten

Funktio limit_text($text, $limit = 100000000000) (
if (strlen ($text)< $limit) {
palauttaa $teksti;
}
$split_words = explode(" ", $teksti);
$out = nolla;
foreach ($split_words kuin $word) (
if ((strlen($word) > $limit) && $out == null) (
return substr($sana, 0, $rajoitus)."...";
}

If ((strlen($out) + strlen($word)) > $limit) (
palauttaa $out . "...";
}
$out.=" " . $sana;
}
palauttaa $out;
}

echo limit_text("hei maailma lorem ipsum",10);

Jokaisen itseään kunnioittavan web-ohjelmoijan tulee osata PHP-kieli, jota voidaan käyttää verkkosivujen luomiseen. Tämä kieli perustuu C- ja C++-kieleen, ja siksi siinä on monia tälle kielelle ominaisia ​​rakenteita. Esimerkiksi PHP:ssä merkkijonon pituuden palauttaa funktio, jolla on sama nimi kuin C:ssä. Tässä artikkelissa puhutaan merkkijonoista sekä toiminnoista, joita niille voidaan suorittaa.

Mutta ennen kuin puhumme funktioista, annetaan perusmääritelmä. Merkkijono on merkkijono, joista jokainen vie tasan yhden tavun. Tämä tarkoittaa, että PHP tukee 256 merkkiä. Tästä seuraa loogisesti, että tällä kielellä ei ole Unicode-tukea - loppujen lopuksi Unicodessa on paljon enemmän merkkejä.

Mitä operaatioita merkkijonojen kanssa on PHP:ssä? Merkkijonon pituus, niiden ketjuttaminen (yhteys), merkkikoodin palauttaminen ja päinvastoin ovat yksinkertaisimpia esimerkkejä. On olemassa monimutkaisempia - alimerkkijonohaku, hajautus, inversio. Ja on myös sellaisia ​​asioita kuin tunnisteiden poistaminen, haku kuvion mukaan, jakaminen osamerkkijonoihin erottimen avulla... Kaikkea ei voi luetella! Siksi puhumme niistä yleisimmistä ja hyödyllisimmistä.

Ensimmäinen ja yleisimmin käytetty funktio PHP:ssä on merkkijonon pituus. Sitä kutsutaan strleniksi ja se ottaa yhden merkkijonon parametrina. Se on yksinkertaista.

$bar=strlen($foo); // $bar on yhtä kuin kolme

PHP:ssä merkkijonon pituus voi olla nolla. Tällaista riviä kutsutaan tyhjäksi.

Seuraava toiminto on ketjuttaminen tai yhdistäminen. Yksinkertaisesti sanottuna se muodostaa yhden kahdesta rivistä.

$foo="Hei,";

$bar=”rauhaa!”;

$baz=concat($foo, $bar);

echo $baz; // tulostaa "Hei, maailma!"

Yksittäisten merkkien kanssa työskentelemiseen on myös kaksi käänteistä toimintoa. Ord - palauttaa merkkikoodin ja chr - määrittää merkin koodilta.

$bar=ord($foo); // $bar on 113

$baz=chr($bar); // $baz on yhtä kuin "q"

On mahdotonta puhua toisesta mielenkiintoisesta funktiosta - päivämäärästä. PHP:ssä merkkijonoja voidaan käyttää mallina ajan näyttämiseen. Jos esimerkiksi välität merkkijonon "H:m:s" päivämäärään ja tuloksen näyttämiseen, nykyinen palvelimen aika näkyy näytössä kaksoispisteellä erotettuna, esimerkiksi "11:08:34".

Katsotaanpa nyt räjähdystoimintoa. Se jakaa merkkijonon elementeiksi pitäen määritettyä merkkiä kunkin rajana. Se kuulostaa melko monimutkaiselta, mutta itse asiassa kaikki on melko selvää. Siellä on esimerkiksi rivi "root|12:56:49|wheel". Sitten voit kirjoittaa näin:

$foo=räjähtää("juuri|12:56:49|pyörä", "|");

Tämän seurauksena $foo-taulukko sisältää kolme elementtiä - "root", "12:56:49", "wheel". Jos et määritä erotinta kutsuessasi funktiota, se katsotaan oletuksena välilyönniksi. On vielä yksi valinnainen parametri - allokoitujen alimerkkijonojen enimmäismäärä.

Seuraava toiminto poistaa HTML-tunnisteet merkkijonosta. Sitä kutsutaan strip_tagsiksi. Kuten explode-funktiossa, siinä on valinnainen toinen parametri - luettelo tunnisteista, jotka on jätettävä.

Yksinkertaiset toiminnot - ketjutus, osamerkkijonohaku, merkkijonon pituus - PHP tulkitsee melko nopeasti. Mutta haun käsittely mallin avulla tai tunnisteiden poistaminen voi kestää melko kauan. Siksi ohjelmat on koottava pätevästi ottaen huomioon, että sen toteuttaminen vie tietyn ajan. Normaalin skriptin tulee toimia enintään 10 sekuntia, jonka jälkeen sen on näytettävä ainakin osa verkkosivusta, muuten käyttäjä poistuu sivulta. Mutta yleensä verkkosovellukset toimivat paljon nopeammin, koska PHP-koodi toimii palvelimella ja selain vastaanottaa komentosarjasta luodun sivun, joka sisältää PHP-skriptin tulosteen.