Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Кодированная строка

Сообщения:  [1-8] 

 
 автор: Wyfinger   (17.09.2007 в 08:17)   письмо автору
 
   для: Shiva   (17.09.2007 в 04:21)
 

Просто огромное спасибо за помощь.

   
 
 автор: Shiva   (17.09.2007 в 04:21)   письмо автору
 
   для: Wyfinger   (17.09.2007 в 01:01)
 


<?php
echo iconv("UTF-8""windows-1251""Это С‚естовый С‚ексС"); // Это тестовый текс
?>

   
 
 автор: Wyfinger   (17.09.2007 в 01:01)   письмо автору
 
   для: bronenos   (16.09.2007 в 17:20)
 

Не помогает. все остается по-прежнему.

А нельзя UTF-8 перекодировать в php ? что-то поискал среди функция - не нашел...

   
 
 автор: bronenos   (16.09.2007 в 17:20)   письмо автору
 
   для: Wyfinger   (16.09.2007 в 12:56)
 

xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=windows-1251');

   
 
 автор: Unkind   (16.09.2007 в 13:46)   письмо автору
 
   для: Wyfinger   (16.09.2007 в 12:56)
 

Вы получаете UTF-8.

   
 
 автор: Wyfinger   (16.09.2007 в 12:56)   письмо автору
 
   для: elenaki   (16.09.2007 в 11:42)
 

Сделал как Вы говорите:
xmlhttp.setRequestHeader('Content-Type', 'text/html; charset=windows-1251');
xmlhttp.setRequestHeader('Cache-Control', 'no-store, no-cache, must-revalidate');
xmlhttp.setRequestHeader('Cache-Control', 'post-check=0, pre-check=0');
var data='nid='+id+'&date='+vdate.value+'&text='+vtext.value;
xmlhttp.setRequestHeader('Content-Length', data.length);


Теперь в POST вообще ничего не приходит. Оно и понятно, ведь в тексте могут быть и пробелы и символы &, ? и т.д. Кодировать чем-то надо, функция encodeURIComponent() подходит, она заменяет все кроме _ . ! ~ * ' ( ) алфавита и цифр.

Проблема в том, что в FF я вижу что data содержит: nid=5&date=16.09.2007&text=%D0%A2%D0%B5%D1%81%D..., а на сервере я получаю белиберду, если текст английский - все нормально.

Кто знает в чем дело?

   
 
 автор: elenaki   (16.09.2007 в 11:42)   письмо автору
 
   для: Wyfinger   (16.09.2007 в 11:11)
 

попробуйте не кодировать, а поставить вот такие хедеры:


header("Content-type: text/html; charset=windows-1251"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0", false); 

   
 
 автор: Wyfinger   (16.09.2007 в 11:11)   письмо автору
 
 

Есть вот такой JavaScript код:
function getXmlHttp(){
  var xmlhttp;
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
      try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
        xmlhttp = false;
      }
   }
     if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
         xmlhttp = new XMLHttpRequest();
    }
     return xmlhttp;
}

var xmlhttp = getXmlHttp();
        xmlhttp.open("POST", './ajax.php?ajax=editnews', true);
        xmlhttp.onreadystatechange = function() {
           if (xmlhttp.readyState == 4) {
               if (xmlhttp.responseText == "ok") {
                       // Данные обновлены
               } else {
                       alert('ОШИБКА: Данные не приняты сервером (post_news).');
               }
           };
        }
        xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        var data='nid='+id+'&date='+encodeURI(vdate.value)+'&text='+encodeURI(vtext.value);
        xmlhttp.setRequestHeader('Content-Length', data.length);
    xmlhttp.send(data);


Как Вы видите, передаю данные скрипту ajax.php через POST, данные: три значения nid - индекс, т.е. число; date - дата; text - текст сообщения. Первый параметр не нуждается в кодирвании, а вот второй и третий содержат русский текст, поэтому кодирую функцией encodeURI() (это я где-то подсмотрел). Все отлично работает, но в php скрипте:

$nid  = (int)$_POST['nid'];
$date = (string)$_POST['date'];
$text = (string)($_POST['text']);
if(!_checkdate($date)) exit;


В $text оказывается строка "Это тестовый текст" (в оригинале "Это тестовый текст"), хотя я ничем ее не раскодировал (по идее должны быть что-то типа %D0%AD%D1%82%D0%BE%20%D1%82). В чем дело? почему оно так, возможно в этом виноват Apache? или как эту строку раскодировать?

   

Сообщения:  [1-8] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования