PHPの構文エラー preg_replace方法
-
19-09-2019 - |
質問
ようにしているbbcodeパーサクラスを作成できpersonalyzedタグがしているのか教えてください問題のurl
いったいなく特定の問題への正規表現が問題きるように特別なタグの方にポイン指定されたURL。
私のクラスいくらいが丁度いいの方法のようになります:
<?
private function check_url_from_bbcode ($tag = "url", $css = null, $url_path = null) {
$regex_url = " a-zA-Z0-9\:\/\-\?\&\.\=\_\~\#\'";
if (!isset ($css)) $css = $this->css_link;
$regex_url = $this->regex_url;
if (isset ($url_path)) $url_path = "$url_path/";
$this->bbcode = preg_replace ("/\[$tag\]([$regex_url]*)\[\/$tag\]/", "<a title=\"Vai al link\" class=\"$css\" href=\"$url_path$1\">$1</a>", $this->bbcode);
$this->bbcode = preg_replace ("(\[$tag\=([$regex_url]*)\](.+?)\[/$tag\])", "<a title=\"Vai al link\" class=\"$css\" href=\"$url_path$1\">$2</a>", $this->bbcode);
}
?>
このコード動作と古典url[url]http://ciao.com[/url] &[url=http://ciao.com]ciao[/url]
ものをしているのか教えてください問題の場合は特別なurl対象のページです。fmスタイルでアーティストレモンゼリー[/作家].
のbblinkに変換される < a href="http://ciao.com/artist/Lemon ゼリー">レモンゼリー< /a> (使いの空間 < a>のみのリンクコードとします。
のリンクは、空白のhref属性ではできない。
<?
private function check_url_from_bbcode ($tag = "url", $css = null, $url_path = null) {
$regex_url = " a-zA-Z0-9\:\/\-\?\&\.\=\_\~\#\'";
if (!isset ($css)) $css = $this->css_link;
$regex_url = $this->regex_url;
if (isset ($url_path)) $url_path = "$url_path/";
// begin of the problem
$this->bbcode = preg_replace ("/\[$tag\]([$regex_url]*)\[\/$tag\]/", "<a title=\"Vai al link\" class=\"$css\" href=\"$url_path".str_replace (" ", "+", $1)."\">$1</a>", $this->bbcode);
// end of the problem
$this->bbcode = preg_replace ("(\[$tag\=([$regex_url]*)\](.+?)\[/$tag\])", "<a title=\"Vai al link\" class=\"$css\" href=\"$url_path$1\">$2</a>", $this->bbcode);
}
?>
これを避けるために、私た少しのコード変更のurl url部分を継urlが"+"の""空白文字のcharので、 アーティストレモンゼリー[/アーティスト うになった < a href="http://ciao.com/artist/Lemon+Jelly">レモンゼリー< /a>
私が体験した事のなリリースでは以下のセキュリティおよびお使いいただくことによっては問題は、私はこの文法その他の状況な出会いの問題です。
で誰か助けてくれるところを私が悪いのでしょうか。
エラータイプPHP Parse error:構文エラーですので、想定T_LNUMBER、T_VARIABLE、'$'に/...
解決
構文エラーは、そのよ $1
が変わってきているんですけどPHPの変数の名前です。その始まりはアンダースコア.の $1
変数の人口を preg_replace
パラメータで有効な内部のパラメータ。
ってみることができます。:
$this->bbcode = preg_replace("/\[$tag\]([$regex_url]*)\[\/$tag\]/e", "'<a title=\"Vai al link\" class=\"$css\" href=\"$url_path'. str_replace(' ', '+', '$1'). '\">$1</a>'", $this->bbcode);
の e
修飾子の評価の置換文字列としてのPHPコードではの文字列です。
注できるようにな試験では、必要があり戻します。申し訳:]
編集 "やきとん"と話になったのは、FTPクライアント固定のregex.で)
他のヒント
お客さまにてご負担ください2-3ラインの前後で線がエラーのライン番号は、PHPで構文解析エラーになります。
これは当てはまりませんの音のように正規表現の問題...以上のように逃げます。
私は新しいので、なぜなのかとの質問をお願いることか書いていなだけじゃない傷を付けても回答)
これを避けるために、私た少し 一部のコード変更のurl url 部分継urlが"+" に""
なぜ使用しないで urlencode
の内容にタグ?
ご注意urlencodeのためだけに使用しますのクエリパラメータ実際のディレクトリにコンポーネントのレイアウトの使用 rawurlencode
, は、HTTPそのものを使用しませんの+の代わりに。
この問題は、1米ドル参考として使用されている str_replace
機能以外の preg_replace
引数になります。の$1backreferenceだけ内 preg_replace
引数んかのように変数 str_replace
;で使用しようとしてい$1変数として、PHPで無効な変数の名前です。