- ベストアンサー
preg_replace()を使用してURLエンコードする方法とエラーの対処法
- preg_replace()を使用して[[文字列]]を<a href="文字列">文字列</a>に置き換えたいがエラーが発生する
- URLエンコードの際に文字エンコーディングを変換する方法とエラーの対処法
- レンタルサーバーでmbstring.encoding_translation=Offの状態で困っている
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です > それも検討してみることにします。 一応私は「秀丸」というを使ってます。 > これらは全て同様に設定して、防ぐしかないのでしょうか。 $str = preg_replace( "/\[\[([^\].]+)\]\]/e" , "'<a href=\"' . urlencode(\"$1\") . '\">$1</a>'" , $str ); こんな感じでいけるみたいです。 これは文字コードがというよりは、構文的な問題になるのかなぁ・・ P.S. エラーになるという場合でも、どんなエラーがどの行で出るのか等 分かる範囲で書いておくといいですよん
その他の回答 (1)
- asahina02
- ベストアンサー率47% (95/202)
$str = mb_convert_encoding( $str, "euc-jp", "sjis" ); $str = preg_replace( "/\[\[([^\].]+)\]\]/e" , "'<a href=\"' . urlencode($1) . '\">$1</a>'" , $str ); $str = mb_convert_encoding( $str, "sjis", "euc-jp" ); こんな感じかな・・ replaceはEUCで行いつつ、SJISに戻して表示する ※正規表現部分ちょっと変更してみた でも、そもそも全体をEUCで書いちゃえば↑のような面倒臭いことしなくていいんじゃないかなぁ
お礼
回答、どうも有り難う御座います。 ご教授頂いたもので上手くいきました。感謝致します。 > 全体をEUC これまでWindows標準のメモ帳(EUCでの保存不可)しか使っていなくて、 他のソフトを使うのは避けたかったのですが、何かとEUCで保存した方が便利そうですね。 それも検討してみることにします。 > ※正規表現部分ちょっと変更してみた 他にも「 ( ) : # 」といった記号が含まれているとエラーになるようなのですが、 これらは全て同様に設定して、防ぐしかないのでしょうか。 文字コードについては、恥ずかしいほど無知故に全く分からないのですが、 どういった物を例外処理する必要があるのでしょうか。 p.s. >> $str="表"; >> $str=urlencode(mb_convert_encoding($str, "EUC-JP", "SJIS")); というのは、そもそも "表" とした時点でエラーになるのですね。 失礼致しました。
お礼
全く問題なく動くようになりました。 迅速なご回答を有り難う御座います。 構文的な問題でしたか・・・。 何故、\"$1\"とすれば上手くいくのかすら分かりません; ところで、正規表現でドット(.)を外す理由は、上の階層にアクセスされることを防ぐためでしょうか? PATH_INFOで引数を受けているので必要ないでしょうかね? > 一応私は「秀丸」というを使ってます。 有り難う御座います。参考にさせて頂きます。 > どんなエラーがどの行で出るのか等... そうですね。失礼致しました。 次回から気をつけます。
補足
御免なさい。 >> PATH_INFOで引数を受けているので必要ないでしょうかね? と書きましたが、PATH_INFOでも上の階層へリンク出来てしまうのですね。 大変失礼致しました。