2012-03-09 64 views
-1

想要將字符串中的特定字母替換爲完整的單詞。在PHP中用字替換字符?

我使用:

function spec2hex($instr) { 

    for ($i=0; $i<strlen($instr); $i++) { 

     $char = substr($instr, $i,1); 

     if ($char == "a"){ 
      $char = "hello"; 
     } 

     $convString .= "&#".ord($char).";"; 

    } 

    return $convString; 
} 

$myString = "adam"; 

$convertedString = spec2hex($myString); 

echo $convertedString; 

但是這回:

hdhm 

我該怎麼辦呢?順便說一下,這是用十六進制字符替換標點符號。

謝謝大家。

+0

你的問題非常模糊 - 只給出一個輸入和期望輸出的例子。 – Poni 2012-03-09 15:05:50

+0

您遇到的問題是'ord($ char)'並不總是單個字符,這是'ord'所期望的。 – 2012-03-09 15:07:16

回答

0

如果你只是想傳遞給函數的字符串中hello更換的a發生,爲什麼不使用PHP的str_replace()

function spec2hex($instr) {  
    return str_replace("a","hello",$instr); 
} 
0

ord()預計只有一個字符。您正在傳遞hello,所以ORD正在儘自己的事情只在h

php > echo ord('hello'); 
104 
php > echo ord('h'); 
104 

所以實際上你的輸出實際上是

&#104;d&#104;m 
+0

我可以做一個接受不止一個字符的ord嗎? – 2012-03-09 15:15:45

+0

像一個不同的功能? – 2012-03-09 15:15:54

+0

不,但您可以將一個字符串'爆炸'爲單個字符並將其應用於循環中。 – 2012-03-09 15:18:29

0
它,你想用你相同的代碼只是改變 $convString .= "&#".ord($char).";";

$convString .= $char;

0

我必須假設你不希望有十六進制字符,而不是punctua但HTML實體。請注意,使用數組調用str_replace()時,將多次在字符串上運行,從而替換「;」在「&#123;」也!

您發佈的代碼對替換標點符號沒有用處。

在數組中使用strtr()時,它不具有str_replace()的缺點。

$aReplacements = array(',' => '&#44;', '.' => '&#46;'); //todo: complete the array 
$sText = strtr($sText, $aReplacements);