stri_replace karakterleri karıştırmasını

1 Cevap php

Bu kod ile kıvrılma yoluyla bir sayfa alıyorum:

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$message = curl_exec($ch);

curl_close($ch);

Ben şimdi $ mesajdaki kod bazı değiştirmeler yapmak istiyorum, ama önce ben bir dosyada kod dökümü:

file_put_contents('debug_before_replace.txt',$message);

Ben bu dosyaya bir göz attığımızda, örneğin ben burada başlık var, tüm metin, iyi görünüyor:

<title>D.O.C.| Jantar Vínico Quinta do Portal | Quinta-feira, 25 de Junho 2009</title>

Şimdi ben değiştiririm:

$message = str_ireplace( array(
'body>', '/body>' ), array(
$fraseemcima, $frasebaixo ), $message );

Ve şimdi ben başka bir dosyaya $ mesajı dökümü:

file_put_contents('debug_after_replace.txt',$message);

Ben dosyasına bir göz attığımızda bu görüyorum:

<title>D.O.C.| Jantar Vínico Quinta do Portal | Quinta-feira, 25 de Junho 2009</title>

Ve ben kod kalanı berbat karakter her türlü var.

Stri_replace bu karışıklık neden kimse anlamak? Bazı posta göndermek için çalışıyorum ve bu her şeyi karışıyor.

NOT: In Ben doğru beden ve / beden etiketleri var, ama ben ekledim eğer

EDIT: Ben bunu sabit!

Bu basit hat şeyi eserlerini katiyen ve görünüm harika görünüyor:

$message = utf8_decode(curl_exec($ch));

Thanks to macbirdie and S. Gehrig for pointing me in the right direction. Guess I still have some learning to do when it comes to charsets

Tekrar teşekkürler

1 Cevap

Sen mb_eregi_replace() yerine gibi, karakter değişimi için bir multi-byte-farkında fonksiyonunu kullanmak gerekir.

Eğer varsa, dosya da kaybedebilir byte-order mark unicode kaybolabilir olarak değiştirme fonksiyonu olmayan bir metin olarak davranın çünkü UTF-8 genişletilmiş karakterler yazılır endiannes ne göstermek için kullanır , ama bu tamamen spekülasyon.