2012-10-23 60 views
1

正如標題所示,我試圖使用PHP將字符»轉換爲它的html實體。這不是我們的最終解決方案,但在完成其他一些重大更改之前,我們需要將此作爲快速解決方案。使用PHP將十六進制代碼0xbb轉換爲html實體»

我試圖用下面的代碼進行測試,但它沒有像我想要的那樣工作。

<form action="test.php" method="post"> 
    <input type="text" name="test" /> 
    <input type="submit" value="Go" /> 
</form> 

<?php 
if (isset($_POST['test'])){ 
    $converted = preg_replace('/\xbb/', '&raquo;', $_POST['test']); 
    echo '<div>Original: '.$_POST['test'].'</div>'; 
    echo '<div>Converted: '. $converted.'</div>'; 
} 
?> 

的轉變似乎是正確的,但&raquo;這顯示了Firefox的查看源代碼只是一個之前我們得到一個額外的角色?在一個廣場上,但我不確定它的實際是什麼或爲什麼它在那裏。

請問有人可以幫忙嗎?謝謝。

回答

0

»是在UTF-8中的c2 bb,但在ISO-8859-1中是bb

當輸出這樣的頁面,是不是UTF-8編碼上,你會看到這樣的事情:

» or 
�» 

的機會,字符被張貼通過爲UTF-8。這意味着第二個字節被替換,但第一個遺體,所以你最終c2隨後&raquo;

嘗試

$converted = preg_replace('/\xbb/u', '&raquo;', $var); 

$converted = preg_replace('/\xc2\xbb/', '&raquo;', $var); 
+0

這兩個解決方案完美地工作,謝謝! –

0

添加u改性劑:

$converted = preg_replace('/\xbb/u', '&raquo;', $_POST['test']); 
0

» character in unicode被表示爲十六進制00bb。你的正則表達式只與第二個字節匹配,所以你仍然有一個空字節。這會工作:

$converted = preg_replace('/\x00\xbb/', '&raquo;', $_POST['test']); 

或者你也可以使用專門旨在匹配Unicode字符另一修改,但我不知道PHP不夠好,理直氣壯地說什麼工作。

+0

這是Unicode代碼點'00 bb'這是UTF-8編碼爲'c2 bb' – CAMason

+0

@CraigMason,謝謝你的額外信息。 – dan1111

+0

謝謝你的回答@ dan1111,它不適用於我的情況,但我不知道爲什麼。 –

相關問題