所以我有%u041E%u043B%u0435%u0433%20%u042F%u043A
如何將它保存爲真正的UTF-8或(對我更好的HTML實體)?如何將這種奇怪的字符串解碼爲UTF-8? (PHP)
回答
這是JavaScript的escape()
格式。它與URL編碼類似但不兼容。完全使用它通常是一個錯誤。
最好的辦法是改變生成它的腳本,使用正確的URL編碼(encodeURIComponent()
)代替。然後,您可以使用urldecode
或服務器端的任何其他常規URL解碼功能對其進行解碼。
如果您絕對必須以非標準格式交換數據,您必須爲其編寫自定義解碼器。這是一個利用HTML字符參考解碼器的快速入門:
function jsunescape($s) {
$s= preg_replace('/%u(....)/', '&#x$1;', $s);
$s= preg_replace('/%(..)/', '&#x$1;', $s);
return html_entity_decode($s, ENT_COMPAT, 'utf-8');
}
這將返回一個原始的UTF-8字節字符串。如果您確實需要使用HTML字符引用(如Ру...
),則請撥打html_entity_decode
電話。但通常你不會。最好保留原始格式的字符串,直到它們需要轉義以進行最終輸出爲止 - 並且除非您確實需要,否則最好不要用字符引用替換非ASCII字符。
什麼?如果有的像這個字符串會來找我 '%CE%EB%E5%E3 +%DF%EA%F3%F8%EA%E8%ED'
這就是URL的形式編碼,它不直接兼容escape()
格式。雖然URL編碼的2位字節轉義不同於瘋狂的escape
格式4位代碼單位轉義,但字符+
不明確。這可能意味着一個加號(如果字符串來自escape
)或空格(如果它來自瀏覽器表單提交)。沒有辦法確定它是什麼。這是不使用escape()
的另一個原因。
除此之外;如果這個字符串的字符集是UTF-8,那麼是的,上面的函數會很好,將URL編碼字節和瘋狂的escape()
-format Unicode字符轉換爲原始的UTF-8字節。
但它實際上似乎是代碼頁1251(Windows俄羅斯語)。你真的想在cp1251中處理你所有的字符串嗎?如果是這樣,你將不得不改變它以使它將四位轉義符編碼成不同的字符集。這是凌亂:
function url_or_maybe_jsescape_decode($s, $charset, $isform) {
if ($isform)
$s= str_replace('+', ' ', $s);
$s= preg_replace('/%u(....)/', '&#x$1;', $s);
$s= preg_replace('/%(..)/', '&!#x$1;', $s);
$s= html_entity_decode($s, ENT_COMPAT, $charset);
$s= str_replace('&!', '&', $s);
$s= html_entity_decode($s, ENT_COMPAT, 'utf-8');
return $s;
}
echo url_or_maybe_jsescape_decode('%CE%EB%E5%E3+%DF%EA%F3%F8%EA%E8%ED', 'cp1251', TRUE);
我會強烈建議:
固定Flash文件,以便它使用正確的
encodeURIComponent
而不是escape
,所以你可以使用一個標準的URL解碼器,而不是這個醜陋的黑客攻擊。使用UTF-8代替全部通過您的應用程序,因此您可以支持除俄羅斯以外的其他語言,並且您不必擔心提交的表單的輸入編碼更改。
(所有編碼都不是UTF-8吸引,這是FACT證明的FACT!)
正如其他人所建議的那樣,將其轉換爲Unicode HTML實體。這個由Flash「逃生(字符串)」產生的正則表達式我用,
function escapePercentU($s) {
$s = preg_replace("/%u([A-Fa-f0-9]{4})/", "&#x$1;", $s);
return html_entity_decode($s, ENT_COMPAT, 'utf-8');
}
- 1. iOS:解碼utf8字符串
- 2. 爲什麼這種奇怪的字符編碼會發生?
- 3. 如何將字符串轉換爲UTF8?
- 4. 將UTF8字符串編碼爲ISO-8859-1字符串(VB.NET)
- 5. 如何將這個奇怪的字符串轉換爲ASP.net中的DateTime格式
- 6. 將UTF8字符串解碼爲拉丁文
- 7. 如何將utf8字符串轉換爲ascii字符串?
- 8. PHP中的奇怪字符串
- 9. 如何解析這種使用PHP的字符串?
- 10. Utf8 - 如何清理這些字符串?
- 11. 字符串奇怪的代碼
- 12. 轉到:奇怪的編碼字符串
- 13. 如何解碼這個JSON字符串?
- 14. 更改字符串編碼WIN1250爲utf8
- 15. 將utf8代碼點字符串轉換爲utf8 <U+0161>轉換爲utf8
- 16. 將PHP json編碼的UTF8字符串轉換爲普通字符
- 17. 如何將此字符串解碼爲utf-8字符串?
- 18. 字符串的奇怪的字符編碼問題
- 19. 如何解碼這個Python字符串?
- 20. 如何解碼這個字符串?
- 21. 奇怪的堆棧/字符串行爲
- 22. 奇怪的字符串拆分行爲
- 23. Java字符串的奇怪行爲
- 24. sscanf與字符串的奇怪行爲
- 25. 如何解碼AS3中的utf8字符串?
- 26. PHP Json_Encode奇怪的字符?
- 27. PHP中的奇怪字符
- 28. 將字節[]轉換爲UTF8字符串
- 29. 奇怪的字符編碼
- 30. utf8字符串中的ruby正則表達式的奇怪行爲
字符串函數 – Rella 2010-05-18 18:42:36