Üdv!
Készítettem egy RTF templatet amibe a nevet %%NEV%% helyettesítettem.
A gond, hogy ha a beviteli input boxba, vagy akár a php-ba direkt megadva ékezet van a cserélendő sztringbe a kimenetbe szép kockák lesznek.
Maga a php utf-8 ba van mentve.
Amiket próbáltam:
iconv;
mb_ereg_replace;
8859-1 be menteni;
8859-2 be menteni;k
ülön utf8-as phpba a beviteli mező és meghívni a csere és küldő filet.
Amivel kirakom:
header("Content-type: application/msword");
header("Content-disposition: inline;filename=my-doc.rtf");
header("Content-length: " . strlen($output));
echo $output;
Megpróbáltam más fejléccel is.
header("Content-type: application/rtf; charset=utf-8");
header("Content-Disposition: attachment; filename=\"my-doc.rtf\"");
Mindenütt ugyanaz az eredmény. A php.ini-be utf8 van beállítva defaultra.
Mi a megoldás??
pch
- 1791 megtekintés
Hozzászólások
http://en.wikipedia.org/wiki/Rich_Text_Format#Character_encoding
Nem egészen tiszta nekem, hogy rtf 1.5-től fölfele akkor natívan támogatja az utf16 karaktereket, vagy csak \uxxxx formában támogatja őket, mindenesetre talán akkor jársz a legjobban, ha explicit encodeolsz minden ékezetes karaktert.
--
Don't be an Ubuntard!
- A hozzászóláshoz be kell jelentkezni
Köszi!
Meg is oldottam.
Íme:
function utf82rtf($text) {
$patterns = array(
"[\xC2-\xDF][\x80-\xBF]",
"[\xE0-\xEF][\x80-\xBF]{2}",
"[\xF0-\xF4][\x80-\xBF]{3}",
);
$new_str = $text;
foreach($patterns as $pattern) {
$new_str = preg_replace("/($pattern)/e",
"'\u'.hexdec(bin2hex(mb_convert_encoding('$1', 'UTF-16', 'UTF-8'))).'?'",
$new_str);
}
return $new_str;
}
pch
--
http://www.buster.hu "A" számlázó
--
- A hozzászóláshoz be kell jelentkezni