utf8_decode возвращает только часть закодированной строки - PullRequest
1 голос
/ 25 ноября 2010

У меня есть текст в utf-8, и я хочу декодировать его, используя utf8_decode()
Но когда я это делаю, я теряю часть текста, utf8_decode() декодирует строку, пока не найдет символ –
Любая идея, чтобы решить эту проблему?

Ответы [ 5 ]

2 голосов
/ 25 ноября 2010
†= E2 80 = 1110 0010 1000 0000

Если это буквально то, что было в вашем тексте UTF-8, то это может быть не UTF-8. За ним должен следовать еще один октет, начинающийся с 10, чтобы быть действительным.

Это потому, что октет, начинающийся с 1110, вводит последовательность из трех октетов со следующими октетами, начинающимися с 10, чтобы доставить в общей сложности 16 байтов полезной нагрузки, чтобы дать кодовую точку Unicode.

РЕДАКТИРОВАТЬ: Вы указали следующий символ 0x93 = 1001 0011, который будет действительным. Последовательность UTF-8 0xE28093 = 0010 00 0000 01 0011 = 0x2013, которая является EN DASH . Итак, в конце концов, это выглядит правдоподобно UTF-8!

2 голосов
/ 25 ноября 2010

Может быть, iconv может помочь вам

1 голос
/ 26 ноября 2010

Вы уверены, что код EdoDodo не работает?

Попробуйте заставить браузер обрабатывать вывод как iso-8859-1.Для этого вам нужен файл в кодировке utf8 со строкой в ​​нем (вам это нужно, потому что текстовые редакторы могут использовать невидимую UTF-8 BOM , а браузер может переключиться на UTF-8 против определенногоISO-8859-2), а другой - с php-кодом в кодировке ANSI (я использую Notepad ++ , просто чтобы убедиться в правильности кодировки - он определяет кодировку файла и показывает ее в нижней части.правый угол, и вы также можете конвертировать между кодировками).

Поэтому создайте файл в кодировке utf-8 с именем utf8.txt , используя только строку:

–

И создать файл в кодировке ANSI index.php с таким содержанием:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
</head> 

<body>

<?php
$str = file_get_contents('utf8.txt');

echo "iconv(//IGNORE//TRANSLIT): " . iconv("UTF-8", "ISO-8859-1//IGNORE//TRANSLIT", $str) . "<br>\n";

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

1 голос
/ 25 ноября 2010

Возможно, вы захотите что-то похожее на это:

$string = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string);

Подробнее о iconv можно прочитать в документации .В зависимости от вашего использования IGNORE может быть более полезным, чем TRANSLIT.

1 голос
/ 25 ноября 2010

Возможно – не в ISO-8859-1?utf8_decode ест только utf8-символов, которые также существуют в ISO-8859-1.

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