PHP dizeleri karşılaştırarak önce kodlama üniforma olun

6 Cevap php

Ben belirli metin bu sayfada mevcut olup olmadığını görmek için kontrol edin, sonra bir web sayfasının içeriğini almak için beni gerektiren bir özelliği üzerinde çalışıyorum. Bu bir backlink kontrol araçtır.

Sorun budur - fonksiyon bağlantı açıkça olduğunda bir bağlantı olmaması için bayraklar bir sayfa, bazen mükemmel çoğu zaman çalışır, ama. Ben görsel çıkış dizeleri karşılaştırma, ve onlar sadece iyi maç, ancak == operatörünü kullanarak bir noktaya kadar takip ettik, php bana söyler onlar eşleşmiyor.

Bu muhtemelen kodlama sorunu bir tür olduğunu kabul ederek, ben onlara () Ben base64_encode kullanılırsa ne olacağını görmeye karar verdi, bu yüzden (tam olarak aynı gibi görünen) iki dizeleri arasında çok üretilen farklı sonuçlar yapıyor diye görebiliyordu .

Benim şüpheleri teyit edildi - karşılaştırılacak dizeleri base64_encode kullanarak her bir farklı bir dize vermiştir. Sorun bulundu! Sorun bunu çözmek için nasıl bir fikrim yok, olduğunu.

Ben php bunları karşılaştırmak, onlar maç ki ben, (maçları) Çıktılanan metne dayanarak bu dizeleri üniforma yapabilirsiniz bazı yolu var mı?

6 Cevap

Ben tamamen bu kodlama olduğu inancından satılan değilim. PHP dahili aynı formatta tüm dizeleri depolamak için gidiyor. Bu kodu dener misin? Bu görsel dizeleri karşılaştırarak sen görmüyorsun şey açığa olabilir, her iki dizeleri her karakterin ASCII değerini karşılaştırmak olacaktır.

$str1 = ...;
$str2 = ...;

if(strlen($str1) != strlen($str2)) {
  echo "Lengths are different!";
} else {
  for($i=0; $i < strlen($str1); $i++) {
    if(ord($str1[$i]) != ord($str2[$i]) {
      echo "Character $i is different! str1: " . ord($str1[$i]) . ", str2: " . ord($str2[$i]);
      break;
    }
  }
}

Uygulama kodu olmadan neler söylemek zor.

Çıplak gözle görünmez sondaki boşluk kaldırmak için dizeleri üzerine trim () kullanmayı deneyin.

Sen strcmp de daha iyi sonuçlar verir bulabilirsiniz.

ne (eğer php> 5.2.0 varsa) bir sanatizing filtre aracılığıyla hem çalışan hakkında. Ben her şeyi yapacağız bilmiyorum, ama olabilir.

http://www.phpro.org/tutorials/Filtering-Data-with-PHP.html#12

Dcaunt tarafından belirtildiği gibi, mb_strstr() ve trim() sahipsiniz.

PHP için Dom Extension kullanarak deneyebilirsiniz. Yeni oluşturmaya Dom Document Eğer temel belge / web sayfasının kodlamasını belirtebilirsiniz. Göre This website, dahili her UTF-8 yapılır. Daha sonra ilgilenmişlerdir dom düğümleri bulmak ve karşılaştırmak olabilir Text Content of the node

Eğer web sayfalarını kullanarak olmasaydı, bir ilişkili belirtilen karakter kodlaması, ben multibyte işlevleri kullanarak öneririm, özellikle mb_detect_encoding ve mb_convert_encoding

Eğer güvenilir bir kodlama alamıyorsanız, size mb_convert_encoding kullanabilirsiniz.

$string1 = mb_convert_encoding($string1, 'utf-8', 'auto');
$string2 = mb_convert_encoding($string2, 'utf-8', 'auto');

Eğer (http başlıklarında veya meta etiketleri) kodlamasını belirleyebilirsiniz Eğer kullanmak yerine kodlama belirtmelisiniz "auto."

$string1 = mb_convert_encoding($string1, 'utf-8', $encoding1);
$string2 = mb_convert_encoding($string2, 'utf-8', $encoding2);