【问题标题】:PHP special characters replace functionPHP特殊字符替换功能
【发布时间】:2016-10-31 10:56:44
【问题描述】:

当我替换 é 时,它会变成 é。我在 PHP 和 HTML 中使用 UTF-8 编码。我希望函数返回我放入函数中的字符的 HTML 代码。

function ctrlspecialchars($subject){    
$search = array("<",">","é","à","â","ä","æ","ç","è","ê","ë","ï","î","ò","ó","ô","ö","ø","ù","ú","û","ü","©","®","«","»","¼","½","¾","±","§","¥","£","{","}","$","%");
$replace = array("&lt;","&gt;","&#233;","&#224;","&#226;","&#228;","&#230;","&#231;","&#232;","&#234;","&#235;","&#239;","&#238;","&#242;","&#243;","&#244;","&#246;","&#248;","&#249;","&#250;","&#251;","&#252;","&#169;","&#174;","&#171;","&#187;","&#188;","&#189;","&#190;","&#177;","&#167;","&#165;","&#163;","&#123;","&#125;","&#36;","&#37;");

return str_replace($search,$replace,$subject); 
 }

【问题讨论】:

  • 是否显示问号图标?
  • é -> 这些标志。我用表格发送了字符 é,没有替换功能,它给了我正确的字符...... é 但我想替换 tha
  • ... 但我想用 -> & # 233; 替换那个字符它甚至还没有保存在数据库中!
  • 你是在控制台打印还是在浏览器打印?我在问它,因为我在本地环境中测试了您的功能并且效果很好
  • @James 已打印在页面中。它是用 utf-8 编码的。如果不使用替换功能进行编码,它会在页面中显示为 é à â æ ç è ê ë ï î ò ó ô ö ø ù ú û ü,WITH 编码 utf8_encode() 或在标题中它在页面中显示为 é à â ä æ ç è ê ë ï î ò ó ô ö ø à 在页面中。我现在什至不谈论配置为 utf8mb4_unicode_520_ci 的数据库,它应该比 normpal utf-8 编码更好,在数据库中它也显示那些奇怪的字符。

标签: php function replace str-replace


【解决方案1】:
【解决方案2】:

由于我复制了您的代码,并且它在我的本地环境中运行良好,因此您的问题不应该出在代码中,而应该确实是编码。

我不知道您的编码需求(也许您需要在某些页面中打印一些特殊字符),但出于测试目的,请尽量让系统的所有部分都使用 UTF-8。 按照@user2879055 的回答提示,将您的数据库配置为使用utf8_general_ci,并确保您的PHP 文件以UTF-8 编码。

请看下面我的编辑器(我正在使用 Atom)配置为以 UTF-8 编码文件的图像。大多数编辑器都有类似的配置。如果您的编辑器有 UTF-8 两种选择(有和无 BOM),请选择无 BOM(信息here)。

最后,如果您使用的是 Apache,请将行 IndexOptions +Charset=UTF-8 添加到您的 .htacces

在这些测试期间避免使用utf8_encondingutf8_decode 函数。

当它工作时,将每个步骤的编码配置改回并进行测试,这样当你的代码再次失败时,你就会发现问题出在哪里。现在,您可以根据您的最终需求配置您的环境,并只处理有问题的部分。

FIY,我正在使用 var_dump(ctrlspecialchars("&lt;ó äî ò æ ç % ®&gt;")); 的功能,我的浏览器显示 /var/www/html/replace.php:10:string '&amp;lt;&amp;#243; &amp;#228;&amp;#238; &amp;#242; &amp;#230; &amp;#231; &amp;#37; &amp;#174;&amp;gt;' (length=61)

【讨论】:

  • 即使没有数据库我也会得到那些奇怪的迹象,因此当它只是作为测试打印在页面中时!问题不是数据库(还),而是页面编码。我仍然在我的电脑上的本地主机上。我要先试试 .htaccess。
  • Db 被转换为 utf8_general_ci 和 php 页面以及 .htaccess。同样奇怪的迹象。我需要这些特殊字符,因为我住在欧洲,我们在法语中使用 ë ç à é è some 在荷兰语中。
  • 这真的很奇怪...您是否已经尝试过 htmlentities 之类的 print_r(htmlentities(ctrlspecialchars("&lt;ó äî ò æ ç % ®&gt;"))); 或类似的东西?
  • 感谢 htmlentities û 在我现在得到的数据库中î ï ö ë ù ó é ç à è因此它完全忽略了我的功能!是的,确实很奇怪。这些来自 html 实体的标志是否被所有浏览器识别?
  • 是的,它应该适用于任何浏览器。在此site 中查看 html 实体列表
猜你喜欢
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
  • 2011-04-23
  • 2013-01-24
  • 2014-02-01
  • 2012-04-06
  • 2011-12-28
相关资源
最近更新 更多