2017-03-31 650 views
0

我有一個像網址:使用domain.tld /Σχετικά_με_μαςPHP希臘URL轉換

[編輯] 讀$ _ SERVER [ 'REQUEST_URI']我得到的工作:

%CE%A3%CF%87%CE%B5%CF%84%CE%B9%CE%BA%CE%AC_%CE%BC%CE%B5_%CE%BC%CE%B1%CF%82 

[/編輯]

在PHP中,我需要將其轉換爲HTML,我得到很遠有:

htmlentities(urldecode($navstring), ENT_QUOTES, 'UTF-8'); 

它結果:

Σχετικά_με_μας 

但 'ά' 變成了 'ά' 但我需要它轉換爲

ά 

I'dd真的很感激幫助。我需要一個通用的解決方案,而不是一個「字符串替換」

+0

聽起來像一個字符集問題給我。爲什麼你需要使用'htmlentities()',你對這些數據做了什麼,還是隻是爲了顯示? – Qirel

+0

當您強制將值設爲UTF-8時會發生什麼情況:htmlentities(utf8_encode($ value)... – sanderbee

+0

當讀取服務器變量時,我得到: %CE%A3%CF%87%CE%B5%CF %84%CE%B9%CE%BA%CE%AC_%CE%BC%CE%B5_%CE%BC%CE%B1%CF%82 這就是爲什麼我需要urldecode –

回答

0

我一直在玩一下,下面的工作。使用MB-轉換編碼,而不是ヶ輛:

mb_convert_encoding(urldecode($navstring),'HTML-ENTITIES','UTF-8'); 
//string(90) "domain.tld/Σχετικά_με_μας" 

mb-convert-encoding

+0

Bingo,謝謝! –

+0

不錯!不客氣! – sanderbee

0

信息

所有現代瀏覽器理解UTF-8字符編碼。 我的建議是:

  • 總是知道您使用的數據的字符編碼。
  • 以UTF-8存儲您的數據。
  • 使用UTF-8

的MBSTRING PHP擴展不只是操縱Unicode字符串輸出數據。它還可以在各種字符編碼之間轉換多字節字符串。 使用mb_detect_encoding()(ref)和mb_convert_encoding()(ref 2)函數將Unicode字符串從一種字符編碼轉換爲另一種字符編碼。

PHP需要知道!

您還需要告訴PHP您正在使用UTF-8,告訴他默認值,您可以在您的php中執行此操作。ini文件

default_charset = "UTF-8"; 

該默認值被添加到,除非你用頭指定,由PHP()返回默認的Content-Type頭功能:

header('Content-Type: application/json;charset=utf-8'); 

記住

默認字符集被PHP中很多函數使用,如:

  • htmlentiti ES()
  • 用htmlspecialchars()
  • 所有MBSTRING功能
  • ...