str replace — & quot; Ошибка разбора: неверный числовой литерал & quot; php chr 039

Я пытаюсь преобразовать странную одиночную речевую метку в обычную в php.

$str = str_replace(chr(039), "'", $str);

Я нашел это код 039 из многих источников, включая https://www.atwebresults.com/ascii-codes.php?type=2.

Но это вызывает ошибку «Parse error: Invalid numeric literal».

Вся моя функция:

function sanitiseString($str){

$str = str_replace(chr(130), ',', $str);    // baseline single quote
$str = str_replace(chr(132), '"', $str);    // baseline double quote
$str = str_replace(chr(133), '...', $str);  // ellipsis
$str = str_replace(chr(039), "'", $str);    // left single quote

$str = str_replace(chr(145), "'", $str);    // left single quote
$str = str_replace(chr(146), "'", $str);    // right single quote
$str = str_replace(chr(147), '-', $str);    // double hyphon
$str = str_replace(chr(150), '-', $str);    // en dash
$str = str_replace(chr(151), '-', $str);    // em dash
$str = str_replace(chr(148), '"', $str);    // right double quote
$str = str_replace(chr(034), '"', $str);    // weird double speech mark
$str = str_replace(chr(034), '"', $str);    // weird double speech mark

$str = iconv("UTF-8","UTF-8//IGNORE",$str); //ignore everything else unrecognised.

$str = str_replace("’", "'", $str);
$str = str_replace('“', '"', $str);
$str = str_replace('”', '"', $str);

return $str;
}

0

Решение

039 недопустимое значение для восьмеричный обозначение, которое вы вызываете с ведущим 0, То, что вы хотите, это просто chr(39), 0 совершенно бессмысленно.

Было сказано, что, str_replace(chr(39), "'", $str) не буду ничего делать с тех пор chr(39) такой же как "'",

0

Другие решения

Это связано с тем, как в PHP7 обрабатываются целые числа, поскольку числа, начинающиеся с 0, рассматриваются как восьмеричные значения.
Восьмеричные числа имеют ограничение в 8 цифр на позицию, от 0 до 7.

Ранее в PHP5 восьмеричное число, содержащее недопустимые числа, было обрезано.
Пример: 0239 был принят за 023.

Напишите число в виде строки, как это должно работать:

$str = str_replace(chr('0039'), "'", $str);
0