Я знаю, что этот вопрос задавался здесь много раз. Но эти решения для меня бесполезны. Я сталкиваюсь с этой проблемой очень плохо сегодня.
// Case 1
$str = 'Test \300'; // Single Quoted String
echo json_encode(utf8_encode($str)) // output: Test \\300
// Case 2
$str = "Test \300"; // Double Quoted String
echo json_encode(utf8_encode($str)) // output: Test \u00c0
Я хочу вывод 2 и у меня есть переменная $ str с одинарными кавычками. Эта переменная заполняется из разбора строки XML. И эта строка XML сохраняется в текстовом файле.
(Здесь \ 300 — кодировка символа А (латинский символ), и я не могу его контролировать.)
Пожалуйста, не дайте мне решение для выше статической строки
заранее спасибо
Это будет делать:
$string = '\300';
$string = preg_replace_callback('/\\\\\d{1,3}/', function (array $match) {
return pack('C', octdec($match[0]));
}, $string);
Он соответствует любой последовательности обратной косой черты, за которой следует до трех чисел, и преобразует это число из восьмеричного числа в двоичную строку. Который имеет тот же результат, что и что "\300"
делает.
Обратите внимание, что это будет не работать точно так же для избежал побега; то есть "\\300"
приведет к буквальному \300
в то время как приведенный выше код преобразует его.
Если ты хочешь все возможные правила двойных кавычек, соблюдаемые без переопределения их вручную, лучше всего просто eval("return \"$string\"")
, но это также имеет ряд предостережений.
Может вы ищете это
$str = 'Test \300'; // Single Quoted String
echo json_encode(stripslashes($str)); // output: Test \\300