-3

アクセント付き文字 (フランス語に存在する文字など) を HTML エンコードされた文字に変換するための PHP の関数はありますか?

4

3 に答える 3

4

必要なのは、それらが有効な UTF8 であることを確認し、適切な content-tyoe ヘッダー ( text/html; charset=utf-8) を設定することだけです。

現在、これらの文字に HTML エンティティを使用する理由はありません。

于 2012-05-10T08:12:29.033 に答える
2

HTML エンコードされた文字を書くので、文字をHTML Entitites Refに変換したいと思います。これらは、HTML 2 ( ISO Latin 1 Character Entity Set ) と HTML 3.2 ( ISO Latin-1 の Character Entities ) で導入され、最後に HTML 4 ( HTML 4 のCharacter entity references ) で導入されました。

どのバージョンの HTML を使用しているかを共有していないので、置き換えたいバージョンを見つけるために、Wikidpediaの XML および HTML 文字エンティティ参照のリストを参照することをお勧めします。

これらに関連する PHP 関数は次のように呼び出されます。ドキュメント.htmlentities

HTTPのcontent-type ヘッダーのおかげで、これは HTML でも同等です。これらの文字をエンティティとしてエンコードする必要はありません。使用している文字セットをブラウザーに伝えるだけでよいからです。出力/応答に使用するエンコーディングに文字が含まれていない場合にのみ、エンティティを使用する必要があります。

それらの場合には、ドキュメントまたは ドキュメント機能が利用できます。データとターゲットに関連するエンコーディングを指定していないため、特定のコード例を指定することはできませんが、一般的なもののみを指定できます。htmlentitiesstrtr

echo htmlentities ($string, ENT_HTML401, $encoding = 'YOUR STRING ENCODING');

ENT_HTML401翻訳テーブルDocsは、あなたが求めた以上の文字を変換します。

組み込みの変換テーブルを使用する代わりに、独自の変換テーブルを作成して、ドキュメント機能。これは、Adobe シンボル フォントなど、データのエンコーディングが でサポートされていない場合にも必要です(参照:シンボル フォントを標準の utf8 HTML エンティティに変換する方法)。または、独自の変換を実行したいだけなので ( PHP を使用して文字列内の非 SGML 文字を置換する方法を参照してください)。strtrhtmlentities

/*
 * mappings of Windows-1252 (cp1252)  128 (0x80) - 159 (0x9F) characters:
 * @link http://en.wikipedia.org/wiki/Windows-1252
 * @link http://www.w3.org/TR/html4/sgml/entities.html
 */
$cp1252HTML401Entities = array(
    "\x80" => '€',    # 128 -> euro sign, U+20AC NEW
    "\x82" => '‚',   # 130 -> single low-9 quotation mark, U+201A NEW
    "\x83" => 'ƒ',    # 131 -> latin small f with hook = function = florin, U+0192 ISOtech
    "\x84" => '„',   # 132 -> double low-9 quotation mark, U+201E NEW
    "\x85" => '…',  # 133 -> horizontal ellipsis = three dot leader, U+2026 ISOpub
    "\x86" => '†',  # 134 -> dagger, U+2020 ISOpub
    "\x87" => '‡',  # 135 -> double dagger, U+2021 ISOpub
    "\x88" => 'ˆ',    # 136 -> modifier letter circumflex accent, U+02C6 ISOpub
    "\x89" => '‰',  # 137 -> per mille sign, U+2030 ISOtech
    "\x8A" => 'Š',  # 138 -> latin capital letter S with caron, U+0160 ISOlat2
    "\x8B" => '‹',  # 139 -> single left-pointing angle quotation mark, U+2039 ISO proposed
    "\x8C" => 'Œ',   # 140 -> latin capital ligature OE, U+0152 ISOlat2
    "\x8E" => 'Ž',    # 142 -> U+017D
    "\x91" => '‘',   # 145 -> left single quotation mark, U+2018 ISOnum
    "\x92" => '’',   # 146 -> right single quotation mark, U+2019 ISOnum
    "\x93" => '“',   # 147 -> left double quotation mark, U+201C ISOnum
    "\x94" => '”',   # 148 -> right double quotation mark, U+201D ISOnum
    "\x95" => '•',    # 149 -> bullet = black small circle, U+2022 ISOpub
    "\x96" => '–',   # 150 -> en dash, U+2013 ISOpub
    "\x97" => '—',   # 151 -> em dash, U+2014 ISOpub
    "\x98" => '˜',   # 152 -> small tilde, U+02DC ISOdia
    "\x99" => '™',   # 153 -> trade mark sign, U+2122 ISOnum
    "\x9A" => 'š',  # 154 -> latin small letter s with caron, U+0161 ISOlat2
    "\x9B" => '›',  # 155 -> single right-pointing angle quotation mark, U+203A ISO proposed
    "\x9C" => 'œ',   # 156 -> latin small ligature oe, U+0153 ISOlat2
    "\x9E" => 'ž',    # 158 -> U+017E
    "\x9F" => 'Ÿ',    # 159 -> latin capital letter Y with diaeresis, U+0178 ISOlat2
);

$outputWithEntities = strtr($output, $cp1252HTML401Entities);
于 2012-05-10T09:42:45.013 に答える
1

ソース: http://coding.smashingmagazine.com/2011/11/02/introduction-to-url-rewriting/

この機能を試してください:

function GenerateUrl ($s) {
  //Convert accented characters, and remove parentheses and apostrophes
  $from = explode (',', "ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,e,i,ø,u,(,),[,],'");
  $to = explode (',', 'c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,e,i,o,u,,,,,,');

  //Do the replacements, and convert all other non-alphanumeric characters to spaces
  $s = preg_replace ('~[^\w\d]+~', '-', str_replace ($from, $to, trim ($s)));

  //Remove a - at the beginning or end and make lowercase
  return strtolower (preg_replace ('/^-/', '', preg_replace ('/-$/', '', $s)));
}
于 2012-07-31T01:54:27.237 に答える