簡體   English   中英

Php str_replace無法使用特殊字符

[英]Php str_replace not working with special chars

為什么這不按預期工作:

 echo str_replace("é","é","Fédération Camerounaise de Football");

結果:

"Fédération Camerounaise de Football"

我期待着:

"Fédération Camerounaise de Football"

你做錯了。 此字符串不正確,需要替換,它只是用UTF-8編碼。

所有你需要做的就是utf8_decode('Fédération Camerounaise de Football')

更新:

你會看到Fédération Camerounaise de Football作為輸出,因為你是以UTF-8雙倍傳遞你的數據。

注意:

file1.php以UTF-8格式保存:

<?php
    echo "Fédération Camerounaise de Football";

輸出:

FédérationCasrounaise de Football

現在,如果您告訴瀏覽器您使用的是UTF-8,它應該直接顯示內容:

file2.php以UTF-8格式保存:

<?php
    header('Content-Type: text/html; charset=utf-8');
    echo "Fédération Camerounaise de Football";

輸出:

FédérationCamerounaisede Football

完善。

不過,你做得更糟。 您有一個UTF-8編碼的字符串,並通過將其寫入UTF-8編碼文件再次對其進行編碼。

file3.php以UTF-8格式保存:

<?php
    echo "Fédération Camerounaise de Football";

輸出:

來自Camerounaise de Football的Fé©dé

真是一團糟。 讓我們通過看看我們是否可以使用str_replace解決這個問題來加劇它:

file4.php以UTF-8格式保存:

<?php
    echo str_replace("é","é","Fédération Camerounaise de Football");

輸出:

FédérationCasrounaise de Football

如你所見,我們“修復”了它。 有點。 多數民眾贊成你在做什么。 你正在將é é轉換為é ,即使你沒有看到這個,因為你的編輯器不會讓你看到編碼背后的真實符號, 但是瀏覽器會這樣做

讓我們用ASCII再試一次:

file5.php以ASCII格式保存:

<?php
    echo str_replace("é","é","Fédération Camerounaise de Football");

輸出:

FédérationCamerounaisede Football

魔法! 瀏覽器現在就搞定了一切。 但是真正的解決方案是什么? 好。 如果你的PHP文件中有一個字符串硬編碼,那么你應該簡單地編寫Fédération Camerounaise de Football而不是將該死的東西放錯。 但是如果你從另一個文件或數據庫中獲取它,你應該選擇以下兩個課程之一:

  1. 使用utf8_decode()將您獲取的數據轉換為所需的輸出。

  2. 不要轉換任何東西並使用header('Content-Type: text/html; charset=utf-8'); 告訴瀏覽器您正在以UTF-8格式打印內容,因此它將正確顯示內容。

//評論后編輯

Fédération Camerounaise de Football是一個UTF-8編碼的字符串,因此我不知道您的文檔中的輸入不是utf-8編碼,但您有兩種選擇。

  1. 您傳遞給str_replace的輸入是utf-8但是您在要替換的函數中使用的字符是ANSII或其他東西=>不起作用 - 這意味着您的文檔不是utf-8 - 這就是uft8_decode工作str_replace(ANSII, ANSII, CONVERT_TO_ANSII(UTF-8))

  2. 你的輸入不是utf-8而你的文件是 - 所以這將工作str_replace(UTF-8, UTF-8, CONVERT_TO_UTF-8(ANSII))


str_replace適用於多字節字符 - 您的問題不是它的功能,因為您嘗試替換不同的編碼類型。 而不是使用替代函數 - 我建議你修改傳遞給str_replaceutf-8的輸入,並確保你的文檔也是utf-8編碼。

如果您的源僅支持非utf-8編碼,請使用utf8_encode將輸入轉換為utf-8

http://php.net/manual/de/function.utf8-encode.php

檢查以下代碼:

$chain="Fédération Camerounaise de Football";
$pattern = array("'é'");
$replace = array('é'); 
$chain = preg_replace($pattern, $replace, $chain);
echo $chain;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM