1

Ребята, возможно не особо удачно составил оглавление вопроса, но суть заключается в следующем:

у меня есть строки вот такого примера:

Программа «Я пробую» (включает 3 smart-тренировки в течении 2 недель) в любое время, всего за 1650 руб., вместо 3300 руб.

Программа "Стройная весна" (включает 6 smart-тренировок в течении месяца) с 7.30 до 17.00, всего за 2499 руб., вместо 6000 руб.

Программа 'Стройная весна' (включает 6 smart-тренировок в течении месяца) с 7.30 до 17.00, всего за 2499 руб., вместо 6000 руб.

Мне необходимо обезопасить себя для отправки в json.

Для этого я хочу удалить все лапки в разных вариантах из строки.

Если я:

$text1 = preg_replace('/[\«\»\'\"]/', '', $text1);

То на выходе я получаю

Программа Я пробую (вк�ючает 3 smart-тренировки в течении 2 неде�ь) в �юбое время, всего за 1650 руб., вместо 3300 руб.

Как это исправить, а также мне необходимо укоротить строку на макс. количество символов до 128

WhoIsDT
  • 685

2 Answers2

5

добавьте /u

$text1 = preg_replace('/[\«\»\'\"]/u', '', $text1);

http://php.net/manual/ru/reference.pcre.pattern.modifiers.php

u (PCRE_UTF8) Этот модификатор включает дополнительную функциональность PCRE, которая не совместима с Perl: шаблон и целевая строка обрабатываются как UTF-8 строки. Недопустимая целевая строка приводит к тому, что функции preg_* ничего не находят, а неправильный шаблон приводит к ошибке уровня E_WARNING. Пятый и шестой октеты UTF-8 последовательности рассматриваются недопустимыми с PHP 5.3.4 (согласно PCRE 7.3 2007-08-28); ранее они считались допустимыми.

myxaxa
  • 371
  • 1
  • 7
3

Просто используйте нативный json_encode, он сам всё экранирует:

$str = "Программа «Я пробую» (включает 3 smart-тренировки в течении 2 недель) в любое время, всего за 1650 руб., вместо 3300 руб.";

$json = json_encode($str);

var_dump($json);

Чтобы укоротить строку, используйте mb_substr:

$str = mb_substr($str, 0, 128);
$json = json_encode($str);
vp_arth
  • 27,179
  • Спасибо, наверное так и сделаю. Можете подтправить свой вариант что бы обрезать строку предварительно до 128 символов – WhoIsDT Oct 30 '17 at 09:37
  • А для mb_substr явно флаг utf-8 есть необходимость передавать? – WhoIsDT Oct 30 '17 at 09:38
  • @WhoIsDT нет, она сама кодировку определяет. – Jean-Claude Oct 30 '17 at 09:38
  • Если у Вас mb_internal_encoding не UTF-8, то да, нужно передать.. – vp_arth Oct 30 '17 at 09:39