2011-01-24 102 views
3

對此進行跟進post我早些時候做的。使用php將特殊字符轉換爲ISO Latin-1代碼?

我發現XML在處理特殊字符時實際上是用數字代碼而不是名稱代碼。所以我通過網上看了如何將特殊字符轉換爲數字代碼,但我沒有任何運氣。

我必須寫一個函數來執行此任務或PHP是否附帶任何默認的功能,可節省佔用大量的作品?

舉例來說,我想á轉換爲ááá

這可能嗎?

如果您有任何想法請幫助。

編輯:

我使用這個建議的特殊字符轉換成數字小字符,

$txt = preg_replace('/([\x80-\xff])/e', "'&#' . ord('$1') . ';'", $txt); 

但我發現,它並沒有這5個特殊字符轉換成數字小碼 - <,>,&,'"

我該如何解決它們?

謝謝。

回答

3

通用的方法是使用:

$txt = preg_replace('/([\x80-\xff])/e', "'&#' . ord('$1') . ';'", $txt); 

必須確保$ TXT確實包含Latin-1的已經(utf8_decode),因爲否則你從字符串字節接收錯誤的值。

0

一個整潔的功能在這裏http://www.sourcerally.net/Scripts/39-Convert-HTML-Entities-to-XML-Entities呈現。要鏈接到html_entities功能呈現給獲得文本的> HTML的「XML

沒有,PHP有沒有內置的功能至今像xml_entities

+0

您鏈接到的頁面有不正確的信息。它開始「輸入一個字符串與HTML實體像&並獲得正確的XML實體 - 在這種情況下, 」。這是誤導。 `&`是所有XML文檔中的有效實體,以及`<`,`>`,`"`和`'`。 – Artefacto 2011-01-25 00:04:26

+0

順便說一句,如果你想解碼用於XML文檔的html實體,你可以使用`html_entity_decode`。 – Artefacto 2011-01-25 00:05:48

+0

@artefacto - 觸動我們的快樂。這是一個起點。您可以始終鏈接html_entities以獲取html以進一步轉換爲xml。 html實體是xml需要的很好的列表。 – RichardTheKiwi 2011-01-25 00:07:40

1

使用mb_encode_numericentity。例如(假設該腳本以UTF-8編碼):

<?php 
header("Content-type: text/plain"); 
echo mb_encode_numericentity("aáb", 
    array(0x0080, 0x10FFFF, 0x0, 0xFFFFFF), "UTF-8"); 

會給:

a&#225;b 

此示例編碼對它們的數字實體的所有不在ASCII的字符。如果你也想編碼字符<>&'",在XML中具有特殊的意義,使用htmlspecialchars(或使用mb_encode_numericentity,但在第二個參數添加這些字符數組)。

但是,請注意,如果您的XML文件使用UTF-8編碼,則只需編碼幾個字符(á不是其中之一)。看到here用於適當的轉換圖中mb_encode_numericentity使用(這包括XML的轉化特殊字符<>&'"和還編碼了部分禁止字符到一個XML文檔中逐字地出現,如U + 0000) 。