Octal для входа в строку из массива

Я хочу преобразовать восьмеричный знак, такой как \46, в обычный знак, такой как &.
Проблема в том, что ввод создается с помощью preg_match_all(), помещается в массив, а затем извлекается.

Если бы я вручную ввел восьмеричное представление \46 в переменную с двойными кавычками, например
$input="\046";
, то PHP прекрасно преобразовал бы ее.

Но когда я помещаю его в массив из preg_match_all(), он возвращает его неконвертированным.

Я хочу преобразовать его, потому что я хочу запросить базу данных (mysql), в которой есть записи со знаком «&» как амперсанд.


person Community    schedule 22.11.2009    source источник
comment
Почему это вики сообщества?   -  person Carlos Lima    schedule 22.11.2009
comment
@carlos Хммм... пусть другие редактируют :)   -  person Chris    schedule 22.11.2009
comment
Да, но я бы сказал, что это не лучший вариант для обычного типа вопроса, как мне это сделать? и соответствующие ответы, так как это не дает очков репутации. В любом случае рад помочь :)   -  person Carlos Lima    schedule 22.11.2009


Ответы (4)


Используйте 1_

Из документации по полосам:

string stripcslashes ( string $str )
Возвращает строку с удаленными обратными косыми чертами.
Распознает C-подобные \n, \r ..., восьмеричные и шестнадцатеричные представления.

<?php
$a = 'a \046 b \075 c';
$b = stripcslashes($a);
echo "$a ==> $b";
?>

outputs: a \046 b \075 c ==> a & b = c
person Community    schedule 22.11.2009

есть интересный трюк с заменой (точнее хак)

$a = 'a \046 b \075 c';
echo preg_replace('~\\\\(0\d\d)~e', '"\\\\$1"', $a);
person Community    schedule 22.11.2009

Не особенно элегантно, но вы можете eval строку. Конечно, это также оценит все остальное в строке, но, возможно, это то, что вы хотите. Если вы хотите избежать оценки переменных, вы должны сначала заменить $ на \$.

<?php

// The string
$a='test a \046 b';

// Output "test a \046 b"
echo "$a\n";

// Convert \046 to &
eval("\$c=\"$a\";");

// Output "test a & b"
echo "$c\n";

?>
person Community    schedule 22.11.2009

но когда он у меня есть в массиве из preg, соответствует всем, он возвращает его неконвертированным.

Пытаться:

$tmp=implode('', $array_from_pregmatch);
$input="$tmp";
person Community    schedule 22.11.2009