2012-09-03 114 views
0

我想將所有的£替換爲它的HTML代碼£=> £,因爲它顯示爲「在鑽石中。Str_replace什麼都不做

我正在使用下面的代碼,但它什麼也沒做。

<?php 
    include ("config.php"); 

    $get_id = mysql_real_escape_string($_GET['id']); 
    $page_get = mysql_query("SELECT * FROM contents_page WHERE `id` = '$get_id'"); 
    while($page_row = mysql_fetch_assoc($page_get)) { 
     $page_row["Page_Content"] = str_replace('£','&pound;',$page_row[Page_Content]); 
     $smarty->assign('page_title',  $page_row['Page_Title']); 
     $smarty->assign('page_content',  $page_row['Page_Content']);  
    } 

    $smarty->display('page.tpl'); 
?> 

我使用str_replace()函數,但沒有任何反應它喜歡它不能看到£

回答

1

我自己有一個編碼問題。轉到數據庫並查看數據是否被亂碼。如果不是,然後設置連接到數據庫之前,連接屬性,如這組CHAR UTF8 ..

$link1 = mysql_connect('localhost','user1','pass1',TRUE); 


mysql_selectdb('db1',$link1); 

mysql_set_charset('utf8',$link2); 

另一個解決辦法是看什麼纔去到數據庫的輸入進行編碼,然後將字符集更改爲

mysql_set_charset('latin1',$ link2);例如

任何方式,我會做什麼,我仍然會將我的字符設置爲utf-8,將結果輸出到頁面中..查看字符是否實際上是磅音,如果它是不同的符號,我會把它放在字符串替換函數中而不是英鎊符號

+0

這解決了這個問題,但是我必須將我的PHP升級到5.3才能使用!謝謝 – Sickaaron

+0

歡迎你。請記住,您獲得的輸入中存在很多問題。例如,你不能猜測某些文本的編碼。因爲它只是猜測。如果您確定您輸入到數據中的數據是UTF ..那麼問題出在數據庫 –

0

你可能會需要像一個自我實現的mb_str_replace(),假設英鎊符號不在範圍標準ascii集。

有是頁面上的多個示例實現: http://php.net/manual/en/ref.mbstring.php

我-hope-那這就是你所需要的,如果你要完全實現統一它變得相當複雜得讓人心煩。這可能是因爲你可以避免使用mb_str_replace在那裏的貢獻不起作用,你可能需要在php ini中打開unicode的功能,以便php甚至能夠識別你想要替換的字符是unicode一。

+0

如果編碼匹配,標準函數工作得很好。 – deceze

+0

我建議你閱讀http://kunststube.net/encoding。好像你需要一些關於PHP和編碼的神祕化。 – deceze

1

添加到您的網頁的head標籤:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
+0

我已經在我的頁面的頭部有這個,刪除這使£跡象顯示!但是,我得到一個BOM。 – Sickaaron

+0

也許你不需要替換任何東西,並且數據庫已經是utf-8了? – JvdBerg

+0

@Sick這不是一個Byte Order標記,它只是一個替換字符,意思是「我不能用你所說的編碼解釋這個」。 – deceze

0
<?php 
$link1 = mysql_connect('localhost','user1','pass1',TRUE); 

mysql_selectdb('db1',$link1); 

mysql_set_charset('utf8',$link1); 
?> 
+1

的編碼上,我不明白這是甚麼問題。請詳細說明。 –