當前位置: 首頁> 最新文章列表> 使用ord() 搭配strtr() 進行字符映射替換,有哪些實用方法?

使用ord() 搭配strtr() 進行字符映射替換,有哪些實用方法?

gitbox 2025-06-17

在PHP 中, ord()strtr()函數是非常實用的工具,它們可以幫助開發者在字符處理方面提高效率。 ord()可以將字符轉換為對應的ASCII 碼,而strtr()則提供了一種簡潔的方式進行字符串的字符替換。本文將探討如何將這兩個函數結合起來進行字符映射替換,並且介紹一些實際應用中的方法。

1. ord()函數的基本使用

ord()函數是一個用於返回字符的ASCII 碼值的PHP 內建函數。例如:

 <span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">ord</span></span><span>(</span><span><span class="hljs-string">'A'</span></span><span>);  </span><span><span class="hljs-comment">// 輸出: 65</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">ord</span></span><span>(</span><span><span class="hljs-string">'a'</span></span><span>);  </span><span><span class="hljs-comment">// 輸出: 97</span></span><span>
</span></span>

通過ord() ,你可以很方便地獲取一個字符的ASCII 碼。這為字符比較、轉換等操作提供了非常基礎但強大的功能。

2. strtr()函數的基本使用

strtr()是一個用於替換字符串中特定字符的函數。它的常見用法有兩種:

  • 字符替換:通過一個字符映射表,將源字符串中的字符替換為目標字符。

  • 字符範圍替換:替換指定範圍內的所有字符。

舉個例子,使用字符映射表進行替換:

 <span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"hello"</span></span><span>;
</span><span><span class="hljs-variable">$trans</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strtr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-string">"h"</span></span><span>, </span><span><span class="hljs-string">"j"</span></span><span>);  </span><span><span class="hljs-comment">// 將 'h' 替換為 'j'</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$trans</span></span><span>;  </span><span><span class="hljs-comment">// 輸出: jello</span></span><span>
</span></span>

在這個例子中,我們用strtr()直接替換了字符串中的字符。 strtr()在處理小範圍字符替換時非常高效。

3. ord()strtr()的結合使用

ord()strtr()結合起來,可以處理更複雜的字符映射任務。我們可以利用ord()函數獲取字符的ASCII 碼,然後使用strtr()進行字符替換。這種組合方法在一些需要處理字符編碼的場景下尤其有用。

3.1 基於ASCII 碼的映射

假設我們有一個字符串,需要根據ASCII 碼值進行字符替換。可以利用ord()獲取每個字符的ASCII 碼,然後根據這些碼值進行條件替換。例如:

 <span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"hello"</span></span><span>;
</span><span><span class="hljs-variable">$trans</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strtr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-string">"h"</span></span><span>, </span><span><span class="hljs-string">"j"</span></span><span>);  </span><span><span class="hljs-comment">// 直接替換</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$trans</span></span><span>;  </span><span><span class="hljs-comment">// 輸出: jello</span></span><span>

</span><span><span class="hljs-comment">// 另一種方法:基於 ord() 進行字符映射</span></span><span>
</span><span><span class="hljs-variable">$new_str</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-title function_ invoke__">str_split</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>) </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$char</span></span><span>) {
    </span><span><span class="hljs-variable">$ascii</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ord</span></span><span>(</span><span><span class="hljs-variable">$char</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$ascii</span></span><span> == </span><span><span class="hljs-number">104</span></span><span>) {  </span><span><span class="hljs-comment">// ASCII 值為 104 時是 'h'</span></span><span>
        </span><span><span class="hljs-variable">$new_str</span></span><span> .= </span><span><span class="hljs-string">'j'</span></span><span>;  </span><span><span class="hljs-comment">// 替換為 'j'</span></span><span>
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-variable">$new_str</span></span><span> .= </span><span><span class="hljs-variable">$char</span></span><span>;  </span><span><span class="hljs-comment">// 保留原字符</span></span><span>
    }
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$new_str</span></span><span>;  </span><span><span class="hljs-comment">// 輸出: jello</span></span><span>
</span></span>

在這個例子中, ord()函數用於獲取字符的ASCII 碼,並根據這個碼來決定是否替換字符。

3.2 大範圍的字符映射

在某些情況下,我們可能需要進行更大範圍的字符替換,例如替換一組字符或者整個字母表。 strtr()支持一次性傳入多個字符來替換。這時結合ord()函數來生成字符映射,可以自動化處理大量字符的替換:

 <span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"abcdefg"</span></span><span>;
</span><span><span class="hljs-variable">$map</span></span><span> = [];

</span><span><span class="hljs-comment">// 創建映射關係:將小写字母 a-z 替換為 A-Z</span></span><span>
</span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">97</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> &lt;= </span><span><span class="hljs-number">122</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>++) {
    </span><span><span class="hljs-variable">$map</span></span><span>[</span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-variable">$i</span></span><span>)] = </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-variable">$i</span></span><span> - </span><span><span class="hljs-number">32</span></span><span>);  </span><span><span class="hljs-comment">// ASCII 码差值為 32(小寫轉大寫)</span></span><span>
}

</span><span><span class="hljs-variable">$trans</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strtr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$map</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$trans</span></span><span>;  </span><span><span class="hljs-comment">// 輸出: ABCDEFG</span></span><span>
</span></span>

在這個例子中,我們首先通過循環生成了一個字符映射表,將小寫字母轉換為大寫字母。然後,使用strtr()一次性替換所有字符。

4. 實際應用場景

4.1 字符加密與解密

ord()strtr()的結合使用可以很方便地實現一些簡單的字符加密和解密算法。例如,可以通過ord()獲取字符的ASCII 碼,進行加密(比如加上一個固定的值),然後用strtr()進行替換:

 <span><span><span class="hljs-comment">// 簡單的字符加密:每個字符的 ASCII 碼加上 1</span></span><span>
</span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"hello"</span></span><span>;
</span><span><span class="hljs-variable">$encrypted</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-title function_ invoke__">str_split</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>) </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$char</span></span><span>) {
    </span><span><span class="hljs-variable">$encrypted</span></span><span> .= </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-title function_ invoke__">ord</span></span><span>(</span><span><span class="hljs-variable">$char</span></span><span>) + </span><span><span class="hljs-number">1</span></span><span>);  </span><span><span class="hljs-comment">// 將每個字符的 ASCII 碼加 1</span></span><span>
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$encrypted</span></span><span>;  </span><span><span class="hljs-comment">// 輸出: ifmmp</span></span><span>
</span></span>

4.2 HTML 轉義字符處理

在HTML 中,某些字符需要轉義,例如<轉為<>轉為> 。利用ord()strtr() ,可以實現自定義的轉義字符處理:

 <span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"&lt;div&gt;Hello World&lt;/div&gt;"</span></span><span>;
</span><span><span class="hljs-variable">$trans</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strtr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, [
    </span><span><span class="hljs-string">"&lt;"</span></span><span> =&gt; </span><span><span class="hljs-string">"&amp;lt;"</span></span><span>,
    </span><span><span class="hljs-string">"&gt;"</span></span><span> =&gt; </span><span><span class="hljs-string">"&amp;gt;"</span></span><span>,
    </span><span><span class="hljs-string">"&amp;"</span></span><span> =&gt; </span><span><span class="hljs-string">"&amp;amp;"</span></span><span>
]);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$trans</span></span><span>;  </span><span><span class="hljs-comment">// 輸出: &amp;lt;div&amp;gt;Hello World&amp;lt;/div&amp;gt;</span></span><span>
</span></span>

在這個例子中,我們用strtr()直接替換了幾個特殊字符,避免了HTML 注入的問題。

5. 總結

通過結合使用ord()strtr() ,PHP 開發者可以在字符映射替換方面獲得更高的靈活性和效率。無論是在加密解密、字符替換、還是生成動態字符映射表時,這兩個函數都可以發揮重要作用。理解並熟練掌握它們的用法,可以幫助你更高效地處理各種字符轉換問題。