| |
|
|
| | Имеются ввиду в основном проблемы с кодировками (на реальном хосте стоит русский апач.). Я думал, что решу их так: на локальном хосте (у меня денвер) отлажу скрипт, загружу его на хостинг и в .htaccess напишу:
CharsetDisable On
Но оказывается, что с помощью этой директивы проблема решается только частично. Например: на локальном хосте ввожу в сообщение в чате слеш \ и просматриваю введенный текст с помощью echo $_POST['text'] Все нормально - вижу один слеш. На реальном хосте в аналогичной ситуации вместо одного слеша вижу два. Вторая проблема: на локальном хосте функция разбиения длинной строки на кириллице работает, на реальном - нет. | |
| |
|
|
| |
|
|
| |
для: coloboc66
(31.05.2007 в 10:43)
| | | > На реальном хосте в аналогичной ситуации вместо одного слеша вижу два.
Вот, это наверное, магические кавычки натворили.
> на локальном хосте функция работает, на реальном - нет.
Скорее всего на риальном выставлена неправильная локаль.
Поменять можно с помощью setlocale, узнать на что менять можно у техсупорта (нужна рус. локаль) | |
| |
|
|
| |
|
|
| |
для: kasmanaft
(31.05.2007 в 10:50)
| | | Что за магические кавычки, зачем они нужны и как с ними бороться в моей ситуации?
Что означает: "на реальном хосте выставлена неправильная локаль"? | |
| |
|
|
| |
|
|
| |
для: coloboc66
(31.05.2007 в 10:52)
| | | >Что за магические кавычки, зачем они нужны и как с ними бороться в моей ситуации?
<?php
if (get_magic_quotes_gpc())
{
$_POST['text'] = stripslashes($_POST['text']);
}
?>
|
| |
| |
|
|
| |
|
|
| |
для: cheops
(31.05.2007 в 11:05)
| | | Или так:
function my_addslashes($string)
{
return (get_magic_quotes_gpc()==1) ? $string : addslashes($string);
}
|
| |
| |
|
|
| |
|
|
| |
для: cheops
(31.05.2007 в 11:05)
| | | После установки кода хеопса, если ввожу один слэш, то все нормально, если больше одного - опять работа нарушается. | |
| |
|
|
| |
|
|
| |
для: coloboc66
(31.05.2007 в 10:52)
| | | > Что означает: "на реальном хосте выставлена неправильная локаль"?
Я такого не говорил :D
Ну не знаю... отличная от той, что стоит на локальном.
В программировании, локаль (англ. locale) — это набор параметров, включая набор символов,
язык пользователя, страну, часовой пояс, а также другие предустановки, которые пользователь
ожидает видеть в пользовательском интерфейсе.
|
Магические кавычки нужны для экранирования обратных слешей и кавычек строк, полученных POST или GET методом. Предполагались как защита от SQL-инъекции.
Проверить включены они или нет можно с помощью ф-ии get_magic_quotes_gpc(). Если выключены, строку стоит обработать вручную.
Поискайте по форуму, если что не понятно. | |
| |
|
|
| |
|
|
| |
для: kasmanaft
(31.05.2007 в 11:13)
| | | >Проверить включены они или нет можно с помощью ф-ии get_magic_quotes_gpc(). Если выключены, строку стоит обработать вручную.
вреднейшее заблуждение.
Если они включены - надо выключить.
На случай, если не получается выключить - при включенных кавычках - нужно обработать строку обратно (как показал cheops).
Обрабатывать же строки "вручную" при дальнейших манипуляциях, связанных со сменой языка, нужно в любом случае.
У colobok66 явно меняется язык... И он эту точку принятия решения упускает.
Но кто сказал, что следующий язык - это именно язык литеральных констант MySQL (JS)? | |
| |
|
|
| |
|
|
| |
для: kasmanaft
(31.05.2007 в 11:13)
| | | А в .htaccess можно магические кавычки выключить? | |
| |
|
|
| |
|
|
| |
для: coloboc66
(31.05.2007 в 11:50)
| | | Попробуйте написать в него
php_flag magic_quotes_gpc off | |
| |
|
|
| |
|
|
| |
для: coloboc66
(31.05.2007 в 10:43)
| | | А что Вы делаете с этой строкой дальше?
Просмотреть echo $_POST['text'] можно только при отладке. А истинная цель? | |
| |
|
|
| |
|
|
| |
для: Trianon
(31.05.2007 в 11:41)
| | | Дальше записываю её в файл. Принцип работы моего чата таков: с заданной периодичностью броузер отправляет на сервер самую свежую (последнюю ) строку из загруженных с сервера, а на сервере эта строка сравнивается со строками, находящимися в файле сообщений, и если есть строки, более свежие, чем эта, то сервер отправляет эти строки броузеру... | |
| |
|
|
| |
|
|
| |
для: coloboc66
(31.05.2007 в 11:52)
| | | А дальше Вы её из файла читаете и отправляете с сервера - клиенту. .
Каким образом? | |
| |
|
|
| |
|
|
| |
для: Trianon
(31.05.2007 в 12:38)
| | | В файле index.php находится текстареа для вводимого сообщения. Кодировка файла: windows-1251. По причине использования аякса для отправки и приема данных для кроссбраузерности отсылаемую строку перед отправкой кодирую в encodeURIComponent(). В файле send.php с header("Content-type: text/plain; charset=UTF-8") записываю эту строку в файл:
Файл send.php
header("Content-type: text/plain; charset=UTF-8");
$text=$_POST['send'];
$text=htmlspecialchars(stripslashes($text));
$text = preg_replace_callback("|(\w{30,})|","split_text",$text);
$text=$_SESSION['user'].': '.$text."[".$today."]"."\r\n";
fwrite($fp,$text);
function split_text($matches)
{
return wordwrap($matches[1], 20, ' ',1);
}
|
Файле index.php с некоторой периодичностью отправляет файлу becom.php последнюю строку из загруженных в филдсет (или строку "null", если ни одного сообщения не загружено).
Файл becom.php
header("Content-type: text/plain; charset=UTF-8");
$a=$_POST['resp'];
for($i=0;$i<count($msg);$i++)
{
if(@strstr($msg[$i],$a)!==false) //если последнее сообщение, принятое от броузера, совпадает с одним из имеющихся в файле
{
searsh($i,$msg);//вызываем функцию поиска в файле сообщений, более свежих, чем принятое
}
function searsh($k;$msg)
{
for($i=0;$i<count($msg1);$i++)
{
$value=$msg1[$i];
$value=nl2br($value);
echo "<span>".$value."</span>";
}
}
|
В файле index.php сообщение, полученное от becom.php , обрабатывается с помощью decodeURIComponent() и записывается в филдсет.
На локальном хосте все работает, на реальном (с русским апачем) выявил две проблемы:
1. При вводе слеша \ он записывается в файл и выводится в филдсет, все последующие сообщения в файл записываются, но броузеру не отправляются.
echo get_magic_quotes_gpc(); на реальном хосте выдает 1, на локальном выдает 0.
Как можно её выключить?
2. Функция разбиения длинной строки в файле send.php на реальном хосте с кириллицей не работает. | |
| |
|
|
| |
|
|
| |
для: coloboc66
(31.05.2007 в 14:17)
| | |
$text=$_POST['send'];
$text=htmlspecialchars(stripslashes($text));
|
htmlspecialchars(stripslashes зачем здесь?
echo "<span>".$value."</span>";
|
И почему htmlspecialchars() нет здесь? | |
| |
|
|
| |
|
|
| |
для: coloboc66
(31.05.2007 в 10:43)
| | | setlocale(), stripslashes() | |
| |
|
|
| |
|
|
| |
для: mihdan
(31.05.2007 в 18:15)
| | | $text=htmlspecialchars(stripslashes($text)); - здесь stripslashes убрал
Проблему с магическими кавычками решил - их нужно было проверять (как говорил Хеопс) не в одном файле (send.php), а в двух (becom.php)
Осталась проблема с нарезкой длинной строки на кириллице. Вот эта функция на латинице работает, а на кириллице - нет:
$text=htmlspecialchars($_POST['text']);
$text = preg_replace_callback("|(\w{30,})|","split_text",$text);
function split_text($matches)
{
return wordwrap($matches[1], 20, ' ',1);
}
|
| |
| |
|
|