0

我有一个来自似乎已用htmlspecialchars()两次编码的 XML 文件的字符串:

$data = "string,s example";

我尝试&只用一个符号替换,然后调用htmlspecialchars_decode(),然后用单词“and”替换简单的符号,但输出结果像stringand#44; example. 我想知道是否有一种方法可以正确转换这些字符编码,或者可能是一个正则表达式来完全去除它们(因为我可以简单地去除它们并将其用作稍后检查的值)?

4

3 回答 3

5

这个特定的字符串需要被处理两次html_entity_decode获得它的“真实”值(这些调用中的第一个也可以是htmlspecialchars_decode)。第一遍将转换&&,第二遍将实体转换,为相应的字符。

您应该小心地将所有相关参数传递给解码函数调用(默认值在所有情况下都没有意义),当然要确保所有传入数据都以这种方式编码,这样您就不会得到错误地破坏了输出。

于 2012-11-03T18:09:14.823 回答
0

使用html_entity_decode如下:

$data = html_entity_decode ( html_entity_decode ( $data ) );
于 2012-11-03T18:15:07.323 回答
0

尽管它几乎可以肯定地在原生 PHP 中按预期工作,但当应用于从 Laravel 控制器馈送到其视图的字符串时,公认的解决方案似乎什么都不做。例如,要转储一个变量,我发现这样做的唯一有效方法是print_r ( $_ENV , true )通过一个with方法提供 eg 返回的值,并将封闭pre标签放入视图中。

控制器:

$sDebugMessages = '$_ENV = '.  print_r ( $_ENV , true ) ;
return view ( 'Info' )->with ( 'sPageTitle' , 'What is My Praesidium Central Hub?' )->with ( 'sDebugMessages' , $sDebugMessages ) ;

看法:

pre>{{ $sDebugMessages }}</pre>

结果(已编辑,原因应该很明显:

$_ENV = Array
(
    [APP_ENV] => local
    [APP_KEY] => xxxxxxxxxxxxxxx
    [APP_DEBUG] => true
    [APP_LOG_LEVEL] => debug
    [APP_URL] => https://localhost
    [DB_CONNECTION] => mysql
    [DB_HOST] => localhost:3306
    [DB_DATABASE] => xxxxxxxxxxxxxxx
    [DB_USERNAME] => xxxxxxxxxxxxxxx
    [DB_PASSWORD] => xxxxxxxxxxxxxxx
    [BROADCAST_DRIVER] => log
    [CACHE_DRIVER] => file
    [SESSION_DRIVER] => database
    [QUEUE_DRIVER] => sync
    [MAIL_DRIVER] => smtp
    [MAIL_HOST] => xxxxxxxxxxxxxxx
    [MAIL_PORT] => 587
    [MAIL_ENCRYPTION] => tls
    [MAIL_USERNAME] => xxxxxxxxxxxxxxx
    [MAIL_PASSWORD] => xxxxxxxxxxxxxxx
    [MAIL_FROM_ADDRESS] => xxxxxxxxxxxxxxx
    [MAIL_FROM_NAME] => xxxxxxxxxxxxxxx
    [MAIL_MODE] => xxxxxxxxxxxxxxx
    [MAIL_MODE_EMAIL] => xxxxxxxxxxxxxxx
)
于 2017-11-22T19:50:40.997 回答