Doğru karakter kodlaması

4 Cevap php

Şu anda (tabii izni ile) metinsel verilerin çeşitli parçalar için bir web sitesi kazıma ediyorum. Ben görüyorum sorun, belirli karakterler doğru sürecinde kodlanmış olmasıdır. Bu, özellikle kesme ile tanınmış (') olduğu gibi: karakter lider:.

Şu anda, kazınmış verilerden çeşitli HTML varlıkları dönüştürmek için aşağıdaki kodu kullanabilirsiniz:

htmlentities($content, ENT_COMPAT, 'UTF-8', FALSE)

Bu tür bir şey işlemek için daha iyi bir yolu var mı?

4 Cevap

HTML kişiler iki gol var:

  • Böyle açı tırnak gibi HTML, özel bir anlamı olan karakterleri kaçmak, yani onlar değişmezler olarak kullanılabilir.
  • Karakter tarafından desteklenmeyen ekran karakterleri böyle bir ISO-8859-1 belgesinde euro sembolü olarak kullanıyorsanız ayarlayın.

Bunlar tam bir encoding aracı değildir.

Eğer başka birine bir charset dönüştürmek istiyorsanız, ben size kullanmanızı öneririm iconv(). Ancak, kaynak ve hedef charset hem de bilmeniz gerekir. Kaynak charset Content-Type cevap başlığında belirtilmelidir ve hedef charset siteyi başladığında Eğer karar bir şey (sizin durumunuzda UTF-8 gibi görünüyor, ancak en makul seçenek) olduğunu.

Bunu saklamak önce hemen htmlentitiesi kullanmak istemiyorum, ben son noktada veri kullanan olacaktır. Eğer içine kaçıyorum sorunlardan biri, insanların her zaman düzgün zaten onların varlıkları kodlamak kalmamasıdır. Herkes kullanır ™ Eğer denemek ve kapmak onlar ne koymak ve düzgün daha iyi olabilir kodlamak için bazı mantık koyarsanız onlar sadece içeri marka kopyalayın. Örneğin:

$patterns = array();
$patterns[0] = '/—/';
$patterns[1] = '/&nsbsp;/';
$patterns[2] = '/®/';

$replacements = array();

$replacements[2] = '&151;';
$replacements[1] = '&160;';
$replacements[0] = '&174;';

$ourhtml = preg_replace($patterns, $replacements, $html);

Tire ve kesme vb, tek tırnak gibi tüm "yakaladım" karakterleri bulmak ve bunları el ile kodlamak yanı sıra, kuruluşlar (metin veya sayısal) için bir dizi standart kullanabilirsiniz.

Sen de aynı şeyi yapmak için normal ifadeler kullanabilirsiniz, ve muhtemelen daha zarif bir çözüm olacaktır. Ama benim önerim elle istemiyorum ne filtreleyerek biraz zaman alabilir olacaktır, ve sonra da veri tam olarak ne gibi nasıl hazırlıklı olacak biliyorum.

Bu sağlanan bilgilere dayalı şeyler önermek için biraz zor. Belki bir metin örneği parçacığını sağlayabilir?

Ben av tüfeği yaklaşım çalışan (örneğin, bir sürü şey düşündüren ve bunlardan biri umuduyla vurur) edeceğiz başarısız

Her şeyden önce, size erişiyor sayfa UTF-8 kodlanmış olduğundan emin misin? mb_detect_encoding ne diyor?

Bir seçenek (sizin ihtiyaçlarınıza bağlı olarak çalışmayabilir) PHP kullanarak işlemek için kolay bir şey haline karakterleri dönüştürmek için TRANSLIT seçeneği ile iconv kullanmak olacaktır. Ayrıca multibyte dizeleri ile çalışmak için mb_* işlevleri kullanarak bakmak olabilir.

Eğer htmlentities sorun olduğundan emin misin? İçerik UTF-8, ve sitenizin ISO-8859-1 hizmet etmek için ayarlanmış ise, tuhaf karakterleri görmek için gidiyoruz. Tarayıcınız emin olun size üreten konum karakter kodlamasını maçları yapmak için kullandığı kodlama edin.

Ben sürece false son parametre olarak geçmek gibi) htmlentitiesi (kullanarak herhangi bir sorun görmüyorum. Bu (örneğin & & dönüşüyor gibi) iki şey kodlamak yok sağlayacaktır.