Etiketlerden temizlemek için php. PHP: HTML etiketlerini metinden nasıl çıkarabilirim? Html etiketlerinden metnin tamamen temizlenmesi

  • 03.11.2019

Gelen verileri kontrol etmek ve işlemek, programlamadaki ortak görevlerden biridir. PHP genellikle web uygulamaları için kullanılır, bu nedenle HTML etiketlerinin metinden kaldırılması burada en alakalı olanıdır çünkü bunlar üçüncü şahıs enjeksiyonlarına en duyarlıdır. Bu makalede, size eski stip_tags () ve püf noktalarını hatırlatmak, ayrıca bölümsel HTML etiketlerini kaldırmak için çözümler ve takip edilecek birkaç yararlı bonus sunmak istiyorum.

Yani. Metinden HTML etiketlerini kaldırmak için ana aracımız strip_tags () işlevidir. Ona veriyoruz dizi değer ve ondan HTML ve PHP etiketlerini kaldırır, örneğin:

$ s \u003d "

Paragraf.

Daha fazla metin. ";
echo strip_tags ($ s);

Bu örnek şu satırı çıkaracaktır:

Paragraf. Daha fazla metin.

Burada dikkat çekicidir ki fonksiyonun bir de ikinci (isteğe bağlı ancak kullanışlı) değeri, izin verilen HTML etiketlerinin bir listesini içeren bir dize olan bir parametre, örneğin:

$ s \u003d "

Paragraf.

Daha fazla metin. ";
echo strip_tags ($ s, "

Bu örnek şu satırı çıkaracaktır:

Paragraf.

Daha fazla metin.

Bence çok uygun. Ancak, bu önemli bir sorunu çözmez - kesitsel HTML etiketlerini kaldırmaörneğin komut dosyası, noscript ve stil en yaygın olanlardır. Bu tür bölüm etiketlerinin yanı sıra "ile başlayan seçenekleri kaldırmam gerektiğinde< » и заканчивающиеся символом « > ", Şu PHP kodunu kullanıyorum:

$ p \u003d dizi (
""]*?>.*?"si",
""]*?>.*?"si",
""]*?>.*?"si",
""<[\/\!]*?[^<>] *?\u003e "si",
);
$ r \u003d array ("", "", "", "");
$ s \u003d preg_replace ($ p, $ r, $ s);

Burada, $ p değişkeni normal ifadelerden oluşan bir dizi içerir ve $ r, bunların karşılık gelen değiştirmelerinin bir dizisidir. (boşluk kullanırım)... Yapılması gereken tek şey satırı değiştirmektir ve HTML çöp kutusunu metinden kaldıracağız.

Açıkçası, yukarıdaki iki çözüm birleştirilebilir. Önce normal ifade değişimini kullanıyorum ve sonra strip_tags () ve kendi nohtml () fonksiyonum var.

Son olarak, size daha faydalı çözümler sunmak istiyorum. Bu nedenle, metinde tabloları bir boşlukla değiştirmek daha iyidir, her ikisinin de tarayıcıda yorumlanmasının sonucu aynıdır ve güçlük daha az olacaktır, örneğin:

$ s \u003d str_replace ("\\ t", "", $ s);

Satır sonlarına ihtiyacınız yoksa boşluklarla da değiştirilebilirler, örneğin:

$ s \u003d str_replace (dizi ("\\ n", "\\ r"), "", $ s);

Basit bir normal ifadeyle fazladan boşluklardan kurtulabilirsiniz, örneğin:

$ s \u003d preg_replace ("/ \\ s + /", "", $ s);
$ s \u003d trim ($ s); // gereksiz olmayacak

Hepsi benim için. İlginiz için teşekkür ederim. İyi şanslar!

zaman: 21:56 Mesajı değiştir

Kullanıcılardan aynı veri üzerinden veri aldığınızda, onlardan iletilen verileri işlemek ve çıktıda net metin almak mantıklıdır.

Bunun farklı şekillerde nasıl yapılabileceğini size şimdi anlatacağım.

PHP'deki bir dizeden tüm HTML etiketleri nasıl kaldırılır?

PHP'nin " strip_tags". Bir değişkendeki tüm HTML etiketlerini hızlı ve kolay bir şekilde kaldırmanıza olanak tanır.

Uygulama:

Selam Dünya!"; $ içerik \u003d strip_tags ($ içerik); echo $ içerik; //" Merhaba, dünya! "çıktı mı?\u003e

Selam Dünya!


"; $ içerik \u003d strip_tags ($ içerik,"

"); echo $ content; //" Merhaba, dünya!

Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Vivamus sed lacus vel diam consectetur rhoncus et eget justo.

" ?>

Bu durumda etiketleri kaydediyoruz

VE ... Bitiş etiketi olan etiketler için, kaydederken onu kaydetmeniz gerekmez.

Not, işlev HTML biçimlendirmesinin geçerliliğini kontrol etmez ve kapatılmamış etiketler varsa, normal metni kaybetme riskiniz vardır.

JavaScript'teki bir dizeden tüm HTML etiketleri nasıl kaldırılır?

JavaScript'te, alınan verileri daha sonra işleyeceğimiz kendi küçük işlevimizi yazacağız.

Uygulama:

Bu örnek, belirli bir değişken üzerinde çalışır, ancak onu, örneğin giriş alanından alınan içeriğe uyacak şekilde değiştirebilirsiniz.

Bir dizeden tüm veya yalnızca belirli html etiketlerini kaldırma görevi, genellikle herhangi bir sayfa ziyaretçisinin yeni bilgi eklemesi için bir fırsat sağlamak gerektiğinde ortaya çıkar. En yaygın örnek, bir ziyaretçi defteri veya site yorumlama sistemidir. Bu şekilde eklenen metin birçok farklı etiket içerebilir, metni kopyalarken yanlışlıkla eklenebilir veya mesajı bir şekilde "çok orijinal" yapmak için kasıtlı olarak eklenebilir. Ayrıca, betik etiketlerinde siteye kötü amaçlı kod enjekte etmeye yönelik kötü niyetli girişimleri veya sayfa düzenini gereksiz etiketlerle bozma girişimlerini de belirtmek gerekir.

Yukarıdaki durumların herhangi birinde, yeni bilgileri kaydetmeden önce onu gereksiz html etiketlerinden temizlemek gerekir.

Html etiketlerinden metnin tamamen temizlenmesi

Normal ifadeler genellikle bu tür görevler için kullanılır, ancak bu makalede en basit yönteme bakacağız - strip_tags php işlevini kullanarak etiketleri kaldıracağız. Bu işlev, etiketleri belirtilen dizeden kaldırır.

$ str_in \u003d "

Benim metin itibaren çeşitli etiketleri.

" ;
$ str_out \u003d strip_tags ($ str_in);
echo $ str_out;

$ Str_out değişkeninde böyle bir işlemin bir sonucu olarak, etiketsiz bir dizge elde ederiz:

Metnim çeşitli etiketlerle.

* Strip_tags işlevinin, içeriklerini açılış ve kapanış etiketleri arasında bırakarak yalnızca etiketleri çıkardığını unutmayın.

Metinden tek tek html etiketlerini kaldırma

Bazen yalnızca belirli etiketleri bir dizeden çıkarmanız gerekir. Burada strip_tags fonksiyonunu da kullanacağız, ancak bu sefer ikinci (isteğe bağlı) parametre ile kaydedilmesi gereken etiketleri belirleyeceğiz.

Örneğin, bir dizeyi işlerken, yalnızca bağlantıları bırakmanız gerekir:

$ str_in \u003d "

Benim metin itibaren çeşitli etiketleri.

" ;
$ str_out \u003d strip_tags ($ str_in, " " );
echo $ str_out;

$ Str_out değişkenindeki bu işlemenin bir sonucu olarak şunu elde ederiz:

Metnim çeşitli etiketlerle.

Böylece, dizede geçerli olan tüm etiketleri belirtebilirsiniz, diğerlerinin tümü kaldırılacaktır.


Bu makalede, bir dizedeki etiketleri temizlemenin en kolay yolu anlatılmaktadır. Diğer seçenekleri değerlendirirken, bu makaleyi genişleteceğim. Bu sorunu çözmek için seçeneklerinizi yorumlarda veya e-posta ile önerirseniz sevinirim.

Kesinlikle herkes html'yi gereksiz etiketlerden temizleme göreviyle karşı karşıyadır.

Akla gelen ilk şey strip_tags () php işlevini kullanmaktır:
string strip_tags (string str [, string allowable_tags])

İşlev, etiketlerden arındırılmış bir dize döndürür. Kaldırılmaması gereken etiketler allowable_tags argümanı olarak iletilir. İşlev işe yarıyor, ancak yumuşak bir şekilde ifade etmek için mükemmel değil. Yol boyunca, etiketlerde bulunmayan metnin kaldırılmasını gerektirebilecek kodun geçerliliği için herhangi bir kontrol yoktur.
Proaktif geliştiriciler boşta oturmadılar - ağda geliştirilmiş işlevler bulunabilir. Strip_tags_smart buna iyi bir örnektir.

Hazır çözümleri kullanmak ya da kullanmamak, programcının kişisel tercihidir. Öyle oldu ki, çoğu zaman "evrensel" bir işleyiciye ihtiyacım yok ve kodu normal ifadelerle temizlemek daha uygun.

Şu veya bu işleme yönteminin seçimini ne belirler?

1. Kaynak malzemeden ve analizinin karmaşıklığından.
Oldukça basit htmp-metinlerini herhangi bir fantezi düzeni olmadan, gün kadar net bir şekilde işlemeniz gerekiyorsa :), o zaman standart işlevleri kullanabilirsiniz.
Metinlerin dikkate alınması gereken belirli özellikleri varsa, o zaman özel işleyicilerin yazıldığı yer burasıdır. Bazıları sadece str_replace kullanabilir. Örneğin:

$ s \u003d array ("â € ™" \u003d\u003e "’ ", // Sağ kesme işareti (örneğin, I" m içinde)
"â € œ" \u003d\u003e "" ", // Konuşma işaretini açma
"â €“ "\u003d\u003e" - ", // Uzun çizgi
"â €" \u003d\u003e "” ", // Kapanış konuşma işareti
"Ã" \u003d\u003e "é", // e akut vurgu
chr (226). chr (128). chr (153) \u003d\u003e "’ ", // Tekrar sağ kesme işareti
chr (226). chr (128). chr (147) \u003d\u003e "-", // Tekrar uzun tire
chr (226). chr (128). chr (156) \u003d\u003e "" ", // Konuşma işaretini açma
chr (226). chr (128). chr (148) \u003d\u003e "-", // M tire tekrar
chr (226). chr (128) \u003d\u003e "” ", // Sağ konuşma işareti
chr (195). chr (169) \u003d\u003e "é", // tekrar vurgulu
);

foreach ($ iğne olarak $ s \u003d\u003e $ değiştir)
{
$ htmlText \u003d str_replace ($ iğne, $ değiştir, $ htmlText);
}

Diğerleri dayanabilir düzenli ifadeler... Örnek olarak:

GetTextFromHTML ($ htmlText) işlevi
{
$ arama \u003d dizi (""]*?>.*?"si", // javaScript'i kaldırın
""]*?>.*?"si", // Stilleri kaldır
""]*?>.*?"si", // xml etiketlerini kaldırın
""<[\/\!]*?[^<>] *?\u003e "si", // HTML etiketlerini kaldırın
"" ([\\ r \\ n]) [\\ s] "", // Boşlukları kaldırın
"" & (quot | # 34); "i", // HTML özel karakterlerini değiştirin
"" & (amp | # 38); "i",
"" & (lt | # 60); "i",
"" & (gt | # 62); "i",
"" & (nbsp | # 160); "i",
"" & (iexcl | # 161); "i",
"" & (sent | # 162); "i",
"" & (pound | # 163); "i",
"" & (kopya | # 169); "i",
"" (\\ d); "e"); // php olarak yaz

$ değiştir \u003d dizi ("",
"",
"",
"",
"\\1",
"\"",
"&",
"<",
">",
" ",
chr (161),
chr (162),
chr (163),
chr (169),
"chr (\\\\ 1)");

Preg_replace döndür ($ arama, $ değiştirme, $ htmlText);
}
(Bu tür anlarda, preg_replace'in parametreler olarak dizilerle çalışma yeteneği her zamankinden daha fazla memnun. Gerekirse, diziyi normal dizilerinizle tamamlarsınız. Örneğin, bu regex yapıcısı onları derlemenize yardımcı olabilir. Acemi geliştiriciler, "HTML etiketleri hakkında her şey. HTML etiketlerini çıkarmak için 9 Normal İfade" başlıklı makaleyi yararlı bulabilir. Oradaki örneklere bakın, mantığı analiz edin.

2. Ciltlerden.
Hacimler doğrudan analizin karmaşıklığı ile ilgilidir (önceki paragraftan). Çok sayıda metin, her şeyi önceden görmeye ve düzenli olarak temizlemeye çalışarak bir şeyleri kaçırma olasılığınızı artırır. Bu durumda, "çok aşamalı" temizleme yöntemi uygundur. Yani, önce strip_tags_smart işlevini kullanarak temizleyin (her ihtimale karşı kaynakları silmiyoruz). Daha sonra "anormallikleri" belirlemek için seçmeli olarak bir dizi metni tararız. Normal hatlarla anormallikleri "temizliyoruz".

3. Sonuç olarak elde edilmesi gerekenden.
İşleme algoritması, duruma bağlı olarak farklı şekillerde basitleştirilebilir. Önceki makalelerden birinde anlattığım vaka bunu çok iyi gösteriyor. Metnin bir div içinde olduğunu hatırlatmama izin verin, buna ek olarak "ekmek kırıntıları" olan bir div, bir adsense reklamı, benzer makalelerin bir listesi. Bir makale örneklemini incelerken, makalelerin şekil içermediği ve basitçe paragraflara bölündüğü görülmüştür. "Ana" div'i gereksiz şeylerden temizlememek için, tüm paragrafları bulabilir (Basit HTML DOM Ayrıştırıcı ile çok basittir) ve içeriklerini birleştirebilirsiniz. Bu yüzden düzenli temizlik yapmadan önce, biraz kanla idare edip edemeyeceğine bir bak.

Genel olarak, html kodunu tamamen normal ifadelere dayanan ayrıştırma ve belgenin DOM yapısının analizine dayanan ayrıştırma destekçileri arasında gerçek holivarlar web'de parlar. Örneğin, taşma. İlk bakışta masum

Tarayıcınızda JavaScript engellendi. Lütfen sitenin çalışması için JavaScript'i etkinleştirin!

strip_tags

(PHP 3\u003e \u003d 3.0.8, PHP 4, PHP 5)

strip_tags - HTML ve PHP etiketlerini dizeden kaldırır

Açıklama

dizi strip_tags (string str [, string allowable_tags])

Bu işlev, HTML ve PHP etiketlerinin kaldırıldığı dizeyi döndürür. Etiketleri kaldırmak için, işlevde kullanılana benzer bir otomat kullanılır. fgetss () .

İsteğe bağlı ikinci bağımsız değişken, kaldırılmaması gereken etiketleri belirtmek için kullanılabilir.

Yorum Yap: Allowable_tags argümanı PHP 3.0.13 ve PHP 4.0b3'te eklenmiştir. PHP 4.3.0'dan beri, HTML yorumları da kaldırılmıştır.

Dikkat

Çünkü strip_tags () HTML kodunun doğruluğunu kontrol etmez, eksik etiketler, etiketlerde bulunmayan metnin kaldırılmasına neden olabilir.

Örnek 1. Kullanım örneği strip_tags ()
$ text \u003d "

Paragraf.

Biraz daha text "; echo strip_tags ($ text); echo" \\ n \\ n ------- \\ n "; // kaldırmayın

Yankı strip_tags ($ metin, "

"); // İzin vermek ,, echo strip_tags ($ metin, " ");

Bu örnek çıktı:

Paragraf. Biraz daha metin -------

Paragraf.

Biraz daha metin

Dikkat

Bu işlev, style ve onmouseover dahil allowable_tags bağımsız değişkeninde belirtilen etiketlerin özniteliklerini değiştirmez.

PHP 5.0.0'dan beri strip_tags () verileri ikili biçimde işlemek için güvenlidir.

Bu işlevin önemli bir dezavantajı vardır - etiketleri kaldırırken kelimeleri yapıştırmaktır. Ek olarak, işlevin güvenlik açıkları vardır. Strip_tags'e benzer alternatif bir işlev:

c "* -" kirli "html, etiket özellik değerlerinde karakterler bulunduğunda doğru şekilde işlenir< > * - bozuk html doğru şekilde işlenir * - yorumlar, komut dosyaları, stiller, PHP, Perl, ASP kodu, MS Word etiketleri, CDATA kesilir * - metin html kodu içeriyorsa otomatik olarak biçimlendirilir * - aşağıdaki gibi sahteciliklere karşı koruma "<script\u003e alert ("merhaba")script\u003e "* * @param string $ s * @param array $ allowable_tags Kesilmeyecek etiket dizisi * Örnek:" b "- etiket niteliklerle kalacaktır," "- etiket nitelikler olmadan kalacaktır * @param bool $ is_format_spaces Boşlukları ve satır sonlarını biçimlendir? * Çıktı metni (düz) tarayıcıdaki giriş metnine olabildiğince yakın. * Başka bir deyişle, metni / html'yi akıllıca metin / düz'e dönüştürür. * Metin yalnızca herhangi bir etiket çıkarıldıysa biçimlendirilir. * @Param dizisi $ pair_tags içerikle birlikte kaldırılacak eşleştirilmiş etiket adlarının dizisi * bkz. Varsayılan değerler * @param array $ para_tags eşleştirilmiş etiket adları dizisi, bu paragraflar olarak ele alınacaktır ($ is_format_spaces \u003d true ise) * varsayılanlara bakın * @return string * * @license http://creativecommons.org/licenses/by-sa/3.0/ * @author Nasibullin Rinat, http: //orangetie.ru/ * @charset ANSI * @version 4.0.14 * / function strip_tags_smart (/ * string * / $ s, array $ allowable_tags \u003d , / * boolean * / $ is_format_spaces \u003d true, array $ pair_tags \u003d array ("komut dosyası", "stil", "eşleme", "iframe", "çerçeve kümesi", "nesne", "uygulama", "co mment "," düğme "," metin alanı "," seç "), array $ para_tags \u003d array (" p "," td "," th "," li "," h1 "," h2 "," h3 ", "h4", "h5", "h6", "div", "form", "başlık", "ön")) (// strip_tags ($ s) döndür; statik $ _callback_type \u003d yanlış; statik $ _allowable_tags \u003d dizi (); statik $ _para_tags \u003d array (); # etiket öznitelikleri için normal ifade # doğru işlemler kirli ve bozuk HTML'yi tek baytlı veya çok baytlı UTF-8 karakter kümesinde! static $ re_attrs_fast_safe \u003d "(?!) #statement, etiketin ardından #correct attributes (?\u003e [^\u003e" \\ "] + | (?<=[\=\x20\r\n\t]|\xc2\xa0) "[^"]*" | (?<=[\=\x20\r\n\t]|\xc2\xa0) \"[^\"]*\")* #incorrect attributes [^>] * + "; if (is_array ($ s)) (if ($ _callback_type \u003d\u003d\u003d" strip_tags ") ($ tag \u003d strtolower ($ s); if ($ _allowable_tags) (#tag if (array_key_exists ($ etiket, $ _allowable_tags)) $ s; #tag, öznitelikler olmadan döndür if (array_key_exists ("<" . $tag . ">", $ _allowable_tags)) (if (substr ($ s, 0, 2) \u003d\u003d\u003d""; if (substr ($ s, -2) \u003d\u003d\u003d" /\u003e ") döndür"<" . $tag . " />"; dönüş"<" . $tag . ">";)) if ($ tag \u003d\u003d\u003d" br ")" \\ r \\ n "; if ($ _para_tags && array_key_exists ($ tag, $ _para_tags))" \\ r \\ n \\ r \\ n "; return "";) trigger_error ("Bilinmeyen geri arama türü" ". $ _callback_type." "!", E_USER_ERROR);) if (($ pos \u003d strpos ($ s, "<")) === false || strpos($s, ">", $ konum) \u003d\u003d\u003d yanlış) # hız iyileştirme (# etiketler bulunamadı $ s;) $ uzunluk \u003d strlen ($ s); # eşleşmemiş etiketler (açma, kapama,! DOCTYPE, MS Word ad alanı) $ re_tags \u003d "~: * +)?) # 1 ". $ Re_attrs_fast_safe."\u003e ~ SxSX "; $ desenler \u003d dizi (" /<([\?\%]) .*? \\1>/ sxSX ", # gömülü PHP, Perl, ASP kodu" /<\!\\]>/ sxSX ", # CDATA blokları #" /<\!\[ [\x20\r\n\t]* .*? \]>/ sxSX ", #: KULLANIMDAN KALDIRILDI: MS Word etiketleri gibi... "/<\!--.*?-->/ sSX ", # yorumlar #MS Word etiketleri gibi"...", # IE türü için koşullu kod yürütme" HTML "IE türü için koşullu kod yürütme" HTML"# http://www.tigir.com/comments.htm adresine bakın" /<\! (?:--)?+ \[ (?> [^ \\] "\\"] + | "[^"] * "| \\" [^ \\ "] * \\") * \\] (?: -)? +\u003e / sxSX ",); if ($ pair_tags) (içerikli # eşleştirilmiş etiket: foreach ($ pair_tags as $ k \u003d\u003e $ v) $ pair_tags [$ k] \u003d preg_quote ($ v, "/"); $ desenler \u003d "/<((?i:" . implode("|", $pair_tags) . "))" . $re_attrs_fast_safe . "(? .*? <\/(?i:\\1)" . $re_attrs_fast_safe . "> / sxSX ";) #d ($ kalıplar); $ i \u003d 0; # döngü koruması $ max \u003d 99; while ($ i< $max) { $s2 = preg_replace($patterns, "", $s); if (preg_last_error() !== PREG_NO_ERROR) { $i = 999; break; } if ($i == 0) { $is_html = ($s2 != $s || preg_match($re_tags, $s2)); if (preg_last_error() !== PREG_NO_ERROR) { $i = 999; break; } if ($is_html) { if ($is_format_spaces) { /* В библиотеке PCRE для PHP \s - это любой пробельный символ, а именно класс символов [\x09\x0a\x0c\x0d\x20\xa0] или, по другому, [\t\n\f\r \xa0] Если \s используется с модификатором /u, то \s трактуется как [\x09\x0a\x0c\x0d\x20] Браузер не делает различия между пробельными символами, друг за другом подряд идущие символы воспринимаются как один */ #$s2 = str_replace(array("\r", "\n", "\t"), " ", $s2); #$s2 = strtr($s2, "\x09\x0a\x0c\x0d", " "); $s2 = preg_replace("/ [\x09\x0a\x0c\x0d]++ | <((?i:pre|textarea))" . $re_attrs_fast_safe . "(? .+? <\/(?i:\\1)" . $re_attrs_fast_safe . "> \\ K / sxSX "," ", $ s2); if (preg_last_error ()! \u003d\u003d PREG_NO_ERROR) ($ i \u003d 999; break;)) # ($ izin verilen_etiketler) $ _allowable_tags \u003d array_flip ise kesilmeyecek etiket dizisi ($ allowable_tags); ($ para_tags) $ _para_tags \u003d array_flip ($ para_tags);)) #tags işleniyorsa ($ is_html) ($ _callback_type \u003d "strip_tags"; $ s2 \u003d preg_replace_callback ($ re_tags, __FUNCTION__, $ s2); $ _callback_type \u003d false; if (preg_last_error ()! \u003d\u003d PREG_NO_ERROR) ($ i \u003d 999; break;)) if ($ s \u003d\u003d\u003d $ s2) break; $ s \u003d $ s2; $ i ++;) # while if ($ i\u003e \u003d $ max) $ s \u003d strip_tags ($ s); # değiştirmek için çok fazla döngü ... if ($ is_format_spaces && strlen ($ s)! \u003d \u003d $ uzunluk) (# yinelenen boşlukları kaldır $ s \u003d preg_replace ("/ \\ x20 \\ x20 ++ / sSX", "", trim ($ s)); # yeni satırlardan önceki ve sonraki boşlukları kaldır $ s \u003d str_replace (dizi ("\\ r \\ n \\ x20", "\\ x20 \\ r \\ n"), "\\ r \\ n", $ s); # 3 ve daha fazla yeni satırı 2 yeni satıra yerleştirin $ s \u003d preg_replace ("/ [ \\ r \\ n] (3,) + / sSX "," \\ ) $ s döndür; )?\u003e

Ayrıca fonksiyon açıklamasına bakın




Bilgisayar yardım sitesi

© Telif Hakkı 2020,
rzdoro.ru - Bilgisayar yardım sitesi

  • Kategoriler
  • Dizüstü bilgisayarlar
  • Windows 8
  • Ses videosu
  • Aygıtlar
  • Miscellanea
  • Linux
  • internet
  • Microsoft Office