所以我有%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. 如何將UTF8字符串轉換爲PHP中的代碼頁?
- 2. iOS:解碼utf8字符串
- 3. 爲什麼這種奇怪的字符編碼會發生?
- 4. 逃脫特殊字符這種奇怪的行爲是如何解釋的?
- 5. 如何將字符串轉換爲UTF8?
- 6. UTF8 - 仍然顯示奇怪的字符?
- 7. 奇怪的字符插入表utf8
- 8. 如何處理硒中的奇怪字符? 'utf8'編解碼器無法解碼位置0中的字節0xc3:
- 9. 的NSString - 解碼UTF8字符串
- 10. 奇怪的字符,而解碼的VBScript
- 11. 如何使用jQuery解碼UTF8字符?
- 12. 奇怪的字符串行爲
- 13. 將UTF8字符串編碼爲ISO-8859-1字符串(VB.NET)
- 14. 如何將這個奇怪的字符串轉換爲ASP.net中的DateTime格式
- 15. 如何確定需要UTF8解碼的字符串
- 16. 將UTF8字符串解碼爲拉丁文
- 17. 如何解析這種使用PHP的字符串?
- 18. 如何將utf8字符串轉換爲ascii字符串?
- 19. 如何將字符串解碼爲C#中的XML字符串
- 20. Utf8 - 如何清理這些字符串?
- 21. PHP中的奇怪字符串
- 22. 如何解碼這個JSON字符串?
- 23. 轉到:奇怪的編碼字符串
- 24. 字符串奇怪的代碼
- 25. php函數將奇怪的字符串編碼爲正常的希伯來語
- 26. python3解碼外部UTF8字符串
- 27. 如何在PHP中將ASCII編碼的字符串轉換爲UTF8?
- 28. 如何將字符串更改爲utf8編碼?
- 29. 如何在Delphi XE5上將字符串編碼爲UTF8 WideString?
- 30. 爲什麼這種奇怪的行爲?
字符串函數 – Rella 2010-05-18 18:42:36