2012-09-03 117 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

的编码上,我不明白这是甚么问题。请详细说明。 –