stri_replace портит персонажей - PullRequest
0 голосов
/ 29 июня 2009

Я получаю страницу через curl с этим кодом:

$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); 

Теперь я хочу сделать некоторые замены в коде в $ message, но перед этим я помещаю код в файл:

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

Когда я смотрю на этот файл, весь текст выглядит нормально, например, у меня есть заголовок:

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

Теперь я делаю замену:

$ message = str_ireplace (массив (
) 'Тело>', '/ Тело>' ), массив (
$ Fraseemcima, $ frasebaixo ), $ сообщение );

А теперь я отправляю сообщение $ в другой файл:

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

Когда я смотрю на файл, я вижу это:

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

И в остальной части кода у меня есть все запутанные символы.

Кто-нибудь понимает, почему stri_replace все испортил? Я пытаюсь отправить письмо, и это все портит.

ПРИМЕЧАНИЕ: В замене у меня есть правильные теги body и / body, но если я добавлю

РЕДАКТИРОВАТЬ: я исправил это !!

С этой простой линией все работает и отлично смотрится в перспективе:

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

Спасибо Макбирди и С. Геригу ​​за то, что они указали мне правильное направление. Полагаю, мне еще нужно кое-что узнать, когда дело доходит до кодировок

Еще раз спасибо

Ответы [ 2 ]

1 голос
/ 29 июня 2009

Для замены символов вам потребуется использовать многобайтовую функцию, например mb_eregi_replace().

Если таковой имеется, файл также может потерять метку порядка байтов , которую использует юникод, чтобы указать, в каком порядке записываются расширенные символы UTF-8, поскольку он может быть потерян, поскольку функция замены рассматривайте это как нетекстовое, но это чисто предположение.

1 голос
/ 29 июня 2009

Скорее всего, редактируемый вами текст кодируется в кодировке UTF-8 или другой многобайтовой кодировке.str_ireplace() является не многобайтовым сейфом и работает с одиночными байтами.Это приводит к ситуации, когда ваши многобайтовые символы могут быть уничтожены.Вы также должны проверить, содержит ли документ B yte- O rder- M ark ( BOM ) - это также может привестина некоторые проблемы (согласно этот комментарий )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...