js下正則是這樣的:
var str = "data\/ui_inner\/74\/";str.replace(/\\/,"");
php如下這樣寫卻不對:
$auto_url = preg_replace('/\\/','', $str);
我的目的是替換字串中的\為空白,請問如何替換呢?
按照樓下的答案試了試還是不行呢。。
找到原因了,是因為json_encode()導致的,請問如何解決呢?我去google一下
回複內容:
js下正則是這樣的:
var str = "data\/ui_inner\/74\/";str.replace(/\\/,"");
php如下這樣寫卻不對:
$auto_url = preg_replace('/\\/','', $str);
我的目的是替換字串中的\為空白,請問如何替換呢?
按照樓下的答案試了試還是不行呢。。
找到原因了,是因為json_encode()導致的,請問如何解決呢?我去google一下
除非樓主有潔癖, 否則不建議再去對 json_encode
的結果進行替換, 因為 json_encode
對 /
進行轉義輸出, 對於js來說, 它的內容 還是 /
, 而不是 \/
.
(PS:下面在測試的時候有注釋代碼裡的var_dump
, 只保留echo
)
替換的:
不替換的:
1.html
的代碼如下:
PHP中提供了一個函數 preg_quote
string preg_quote ( string $str [, string $delimiter = NULL ] )
preg_quote()需要參數 str 並向其中 每個Regex文法中的字元前增加一個反斜線。 這通常用於你有一些運行時字串 需要作為Regex進行匹配的時候。
Regex特殊字元有: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
所以以上代碼可以這樣寫
應該這麼寫
$auto_url = preg_replace('/\\\\/','', $str);
也是剛學到,因為在字串中,'\'也是轉義,'/\\/'就變成了'/\/',所以要四個。
也可以用str_replace
$auto_url = str_replace('\\','', $str);
PHP的單引號中仍然會轉義\
所以你需要這麼做
$auto_url = preg_replace('/\\\\/', '', "data\/ui_inner\/74\/");
改成四個\\\\
直接對json做正則替換是不安全的,因為如果商務邏輯有改變,你可能意外修改了其他的域,建議先decode之後修改好之後再重新encode