Dizi dize oturum sekizlik

4 Cevap php

I want to convert octal sign like \46 to normal sign like &.
The problem is that the input is created with preg_match_all(), put into an array and then retrieved.

If I'd manually input the \46 octal notation into variable with double quotes, like
$input="\046";
then PHP would convert it nicely.

I preg_match_all() adlı bir diziye olduğunda Ama dönüştürülmemiş döndürür.

I (mysql) veritabanını sorgulamak istiyorum, çünkü ben "&" ile kayıtları var dönüştürmek istiyor işareti gibi imzalar.

4 Cevap

Kullan stripcslashes()

Kimden stripcslashes documentation:

string stripcslashes ( string $str )
Returns a string with backslashes stripped off.
Recognizes C-like \n, \r ..., octal and hexadecimal representation.

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

outputs: a \046 b \075 c ==> a & b = c

ilginç bir yerini hile (ya da daha doğrusu hack) var

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

Özellikle zarif, ama eval dize olamaz. Tabii ki, bu da dize başka bir şey eval, ama belki de ne istediğinizi. Eğer değişkenler evaling önlemek isterseniz, önce \ $ $ ile değiştirmeniz gerekir.

<?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";

?>

i gebelik maçın tüm dizide o var ama ne zaman bu dönüştürülmemiş geri.

Deneyin:

$tmp=implode('', $array_from_pregmatch);
$input="$tmp";