Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Смена кодировки строки в PHP


Автор: Гость_Shaman 7.8.2003, 08:07
Прошу прощения за ламерский вопрос smile.gif
В переменной хранится строка в кодировке cp-866, мне нужно изменить кодировку этой строки на koi8-r.
как это сделать средствами PHP (без использования внешних приложений и подобной фигни smile.gif)? Заранее спасибо за ответ smile.gif

Автор: rMaveric 7.8.2003, 09:06
convert_cyr_string(твоя строка, исходная кодировка, требуемая кодировка)

cp-866 = a

koi8-r = k

win = w

Ну а больше надо редко разве маковская ее код m

Все. Надеюсь поможет

Автор: Гость_Shaman 7.8.2003, 11:14
Этот способ я знаю и пробовал, не получается smile.gif
есть ли другие? smile.gif

Автор: Cepera 7.8.2003, 13:50
а почему собственно не получается?

Автор: MuToGeN 7.8.2003, 14:57
http://php.net/iconv - другой способ, только требует iconv библиотеку.

Автор: Гость_Shaman 8.8.2003, 07:18
есть строка в кодировке cp866 (скрипт - nntp newsgate), ее нужно отобразить в koi8-r (сервак-то юниксовый smile.gif). И никакие конверт_кир_стринги не помогают, хотя я их в скрипт штук 10 в разных местах уже понапихал smile.gif То есть по идее проблем быть не должно, а они есть...

Автор: Cepera 8.8.2003, 07:28
имхо дело не в пхп ,-)
попробуй создать файл .htaccess
Код
AddDefaultCharset koi8-r

Автор: Cepera 8.8.2003, 07:29
сервак сам должен конвернуть в КОИ8-Р

Автор: Гость_Shaman 8.8.2003, 07:54
Руки бы оторвать тому, кто сервак конфигурировал smile.gif
Не в первый раз уже сталкиваюсь с подобной проблемой smile.gif

Автор: Smoker 8.8.2003, 08:05
Я таки зарегился, форум хорош smile.gif
Ну так вот: не думаю, что это все-таки проблема сервера, так как у меня стоит локальный апач для отладки, настройки там нормальные, какие надо (и адддефолтчарсет тоже стоит smile.gif). И тем не менее проблема повторяется. Сил моих больше нету с кодировками бороться, неужели у всех такие траблыconfused.gif?

По поводу айконвэ-библиотеки, есть ли способ использовать ее функции без подключения к пхп (инклуд там какой-нибудь, или еще что...)?

PS Ух, как я не люблю PHP smile.gif

Автор: Cepera 8.8.2003, 08:50
давай по порядку...
1. плиз, кусок кода с хидерами
2. показ хидеров кидаемых сервером клиенту

Автор: Smoker 8.8.2003, 11:09
Ладно... вот здесь происходит то, что мне нужно:

Код
// A reply of an other article.
if ($type=="reply") {
//  $ns=OpenNNTPconnection($server,$port);
 $message=read_message($id,0,$group);
 $head=$message->header;
 convert_cyr_string($message,"a","k");
 $body=explode("\n",$message->body[0]);
 closeNNTPconnection($ns);
 if ($head->name != "") {
   $bodyzeile=$head->name;
   convert_cyr_string($bodyzeile,"d","k");
 } else {
   $bodyzeile=$head->from;
 }
 $bodyzeile=$bodyzeile." wrote:\n\n";
 for ($i=0; $i<=count($body)-1; $i++) {
   if((isset($cutsignature)) && ($cutsignature==true) &&
      ($body[$i]=='-- '))
     break;
   if (trim($body[$i])!="") {
     $bodyzeile=$bodyzeile."> ".$body[$i]."\n";
   } else {
     $bodyzeile.="\n";
   }
   convert_cyr_string($bodyzeile,"a","k");
 }
 $subject=$head->subject;
 if (isset($head->followup) && ($head->followup != "")) {
   $newsgroups=$head->followup;
 } else {
   $newsgroups=$head->newsgroups;
 }
 splitSubject($subject);
 $subject="Re: ".$subject;
 // Cut off old parts of a subject
 // for example: 'foo (was: bar)' becomes 'foo'.
 $subject=eregi_replace('(\(wa[sr]: .*\))$','',$subject);
 convert_cyr_string($subject,"a","k");
 $show=1;
 $references=false;
 if (isset($head->references[0])) {
   for ($i=0; $i<=count($head->references)-1; $i++) {
     $references .= $head->references[$i]." ";
   }
 }
 $references .= $head->id;
}


Вот так она постится:
Код
 if ($type=="post") {
   if (!$readonly) {
     // post article to the newsserver
     $message=verschicken(quoted_printable_encode(stripslashes($subject)),
                $email." (".quoted_printable_encode($name).")",
               $newsgroups,$references,$body);



В итоге когда вызываю "Ответ" на тему, она пишет "Re: <тема в cp866 хер знает почему>", и абсолютно то же самое происходит с именем, если ввожу его кириллицей....

идеи есть? smile.gif

Автор: Smoker 8.8.2003, 11:29
Цитата(Cepera @ 8.8.2003, 07:29)
сервак сам должен конвернуть в КОИ8-Р

Кстати, сервак ничего никому не должен smile.gif Он не будет конвертить, он просто выведет, считая, что кодировка - кои8, и ему все равно, какая она на самом деле, именно поэтому смена кодировки - задача скрипта и только его (ну либо админа, но про конфигу нашего сервера я уже писал smile.gif)

Автор: Cepera 10.8.2003, 08:57
я извиняюсь, но не пробовал ли ты сделать так, вместо
Код
convert_cyr_string($message,"a","k");

прописать
Код
convert_cyr_string($message,"d","k");

Автор: Smoker 11.8.2003, 07:56
Пробовал, не получилось smile.gif
Впрочем неважно, проблема уже решена, и дело там было совсем не в том куске....
а в некоей загадочной функции htmlentities smile.gif Как ноль в ПХП не могу знать, зачем она вообще нужна, но, удалив ее, таки заставил нормальную кодировку ставить

Автор: Cepera 11.8.2003, 08:31
htmlentities это алиас для htmlspecialchars

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)