2013-03-23 139 views
1

我在泡菜。我剛接手一份新工作,老程序員使用BLOB/bin將內容輸入到MYSQL中。使用preg_replace或htaccess替換url字符串

有1000行我需要「查找並替換」一個新的圖像網址。

當我導出MYSQL數據庫,我無法做一個查找和全部替換,因爲數據是二進制?

我不確定我的選擇是什麼?

我正在考慮使用PHP preg_replace或嘗試爲這些圖像編碼.htaccess重寫或重定向規則?

www.oldsite.com/images/

www.newsite.com/images/

我真的不知道哪種方式更好,更有效率?

我希望我知道如何查找和替換所有二進制文件,或者如果可能?

感謝您的幫助或提示!

編輯

太好了!所以,我可以做這樣的事情

$myString = rawurldecode($offer['description']); 
$newString = preg_replace('/www.myoldsite.com/', 'www.mynewsite.com', $myString); 
echo $newString; 

* 編輯#2和結論*

我最終搞清楚如何做一個查找和替換!感謝@ user113215

結束了使用下面的代碼,它的工作很棒!事件與二進制文件!

UPDATE table_name SET column = REPLACE(column_name, 'www.old.com/', 'www.new.com/') 

謝謝!希望這可以幫助別人!

+1

考慮直接用'UPDATE'和MySQL的['REPLACE()'字符串函數]修改數據庫(http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace) 。這可能需要使用[ALTER TABLE]轉換相關列的字符集(http://dev.mysql.com/doc/refman/5.0/en/charset-conversion.html)。 – user113215 2013-03-23 21:12:31

+0

感謝您的評論!這是否適用於二進制文件? – eberswine 2013-03-23 21:14:52

+1

我在說的是你在MySQL服務器上運行的SQL語句,比如'UPDATE table_name SET column = REPLACE(column_name,'www.old.com/','www.new.com /')',而不是針對文件副本。這將直接修改數據庫。我不確定是否可以在'BLOB'列中使用'REPLACE()',但如果該列中的數據是_actually_字符串,則可以使用'ALTER TABLE'將列類型更改爲'VARCHAR',例如,然後運行'UPDATE'。 – user113215 2013-03-23 21:32:44

回答

1

在代碼中,選擇要顯示的字段時,請使用str_replace。 當代碼是好的時候,它有一個getter這個字段,或者至少有一些中央代碼來做mysql選擇。 str_replace速度很快,並且不佔用那麼多資源。

+0

太棒了!所以我可以做這樣的事情(看我編輯的編輯) – eberswine 2013-03-23 21:13:08

+1

對於一個簡單的替換,你不需要preg_replace,一個str_replace就足夠了: $ url = str_replace('oldsite','newsite',$ myString) ; – 2013-03-24 04:40:35