2

\46のような 8 進数記号を のような通常の記号に変換したい&
問題は、入力が で作成さpreg_match_all()れ、配列に入れられてから取得されることです。

\468 進数表記を二重引用符で囲んだ変数に手動で入力する
$input="\046";
と、PHP はそれを適切に変換します。

しかし、から配列に入れると、preg_match_all()変換されずに返されます。

「&」記号がアンパサンドのレコードを持つデータベース(mysql)をクエリしたいので、変換したいです。

4

4 に答える 4

2

興味深い置換トリック(またはむしろハック)があります

$a = 'a \046 b \075 c';
echo preg_replace('~\\\\(0\d\d)~e', '"\\\\$1"', $a);
于 2009-11-22T12:57:59.453 に答える
2

使用するstripcslashes()

stripcslashesのドキュメントから:

string stripcslashes ( string $str )
バックスラッシュを取り除いた文字列を返します。
C ライクな \n、\r ...、8 進および 16 進表現を認識します。

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

outputs: a \046 b \075 c ==> a & b = c
于 2009-11-22T13:22:27.413 に答える
1

特にエレガントではありませんが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";

?>
于 2009-11-22T11:37:05.363 に答える
0

しかし、preg match allから配列に入れると、変換されずに返されます。

試す:

$tmp=implode('', $array_from_pregmatch);
$input="$tmp";
于 2009-11-22T11:54:10.587 に答える