Автор Тема: PHP - проблема с кодировкой, фильтрацией, ну убирается символ из строки  (Прочитано 1321 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн SuperLipton

  • Юзер
  • *
  • Сообщений: 5
  • Karma: +1/-0
    • Share Post
В базу заносится Text, принимает смайлики, но принимает их в виде Replacement character.
Принимаю с базы Text.
Вывожу на экран, с помощью echo

$commenttext = mb_convert_encoding($comment['text'], 'utf-8', mb_detect_encoding($comment['text']));
$commenttext = preg_replace('//', ' ', $commenttext);
if(!empty($commenttext))

Как убрать replacement character?

P.S. не могу убрать символ � из строки
« Последнее редактирование: Июль 12, 2016, 10:51:30 am от sysadmin »

 

Оффлайн sysadmin

  • Administrator
  • сисадми́н
  • *****
  • Сообщений: 8788
  • Karma: +121/-0
  • Пол: Мужской
    • Share Post
    • сайт для сис. админов и не только...
PHP - проблема с кодировкой, фильтрацией
« Ответ #1 : Июль 12, 2016, 10:32:12 am »
Сам файл в котором содержится код в какой кодировке? Проверил наличие bom в данном файле?
дорогу осилит идущий...
......................
MCP, MCTS, RHCSA
......................
also aka xck...

Оффлайн SuperLipton

  • Юзер
  • *
  • Сообщений: 5
  • Karma: +1/-0
    • Share Post
PHP - проблема с кодировкой, фильтрацией
« Ответ #2 : Июль 12, 2016, 10:40:27 am »
Попробовал сохранить файл в кодировке с BOM, без BOM.
Без этой строчки в кодировке +BOM, вся кириллица выходила replacement'ами
$commenttext = preg_replace('/^[^0-9A-Za-zА-Яа-яЁё]+$/u', '', $commenttext);В остальном без изменений.

Оффлайн sysadmin

  • Administrator
  • сисадми́н
  • *****
  • Сообщений: 8788
  • Karma: +121/-0
  • Пол: Мужской
    • Share Post
    • сайт для сис. админов и не только...
PHP - проблема с кодировкой, фильтрацией
« Ответ #3 : Июль 12, 2016, 10:50:12 am »
А сами данные в каком формате передаются скрипту, может проблема с этой стороны? Я сам не php программист, но здесь явно похоже на проблему с кодировками...

Оффлайн SuperLipton

  • Юзер
  • *
  • Сообщений: 5
  • Karma: +1/-0
    • Share Post
Проблема решена добавлением двух функций, взятых с phpnet
function utf8_str_split($str)
{
$split=1;
$array = array();
for ( $i=0; $i < strlen( $str ); )
{
$value = ord($str[$i]);
if($value > 127)
{
if($value >= 192 && $value <= 223)
$split=2;
elseif($value >= 224 && $value <= 239)
$split=3;
elseif($value >= 240 && $value <= 247)
$split=4;
}
else
{
$split=1;
}
$key = NULL;
for ( $j = 0; $j < $split; $j++, $i++ )
{
$key .= $str[$i];
}
array_push( $array, $key );
}
return $array;
}

function clearstr($str){
$sru = 'ёйцукенгшщзхъфывапролджэячсмитьбю';
$s1 = array_merge(utf8_str_split($sru), utf8_str_split(strtoupper($sru)), range('A', 'Z'), range('a','z'), range('0', '9'),
array('&',' ','#',';','%','?',':','(',')','|','-','_','=','+','[',']',',','.','/','\\'));
$codes = array();
for ($i=0; $i<count($s1); $i++){
$codes[] = ord($s1[$i]);
        }
        $str_s = utf8_str_split($str);
for ($i=0; $i<count($str_s); $i++){
if (!in_array(ord($str_s[$i]), $codes)){
$str = str_replace($str_s[$i], '', $str);
}
        }  return $str;
}

Использование:
echo clearstr('t♥e�s►t◄');
Полученный аргумент (строка) разбивается по символам в массив, затем символы переводятся в ASCII-код и сравниваются с заранее заготовленным массивом разрешенных символов. Если символ не прошел сравнение, вырезается, отформатированная строка возвращается. Таким образом мы вырезали все символы кроме: А-Я, A-Z, 0-9, &, пробел, #;%?:()- _=+[],./\

Оффлайн sysadmin

  • Administrator
  • сисадми́н
  • *****
  • Сообщений: 8788
  • Karma: +121/-0
  • Пол: Мужской
    • Share Post
    • сайт для сис. админов и не только...


xx
Linux - Roundcube проблема с кодировкой вложений

Автор sysadmin

0 Ответов
1048 Просмотров
Последний ответ Январь 12, 2017, 05:44:22 pm
от sysadmin
xx
Тапаталк - проблемы с кодировкой

Автор sysadmin

1 Ответов
863 Просмотров
Последний ответ Ноябрь 08, 2016, 04:24:26 pm
от SteelYOSHI
xx
MS SQL - создать БД с другой кодировкой

Автор sysadmin

0 Ответов
894 Просмотров
Последний ответ Сентябрь 08, 2016, 03:51:08 pm
от sysadmin
xx
Bash - Убрать последний символ в тексте?

Автор around

3 Ответов
3674 Просмотров
Последний ответ Январь 14, 2016, 09:27:16 pm
от NiX