web-dev-qa-db-ja.com

タイトルに特殊文字を含むノードを移行する

ソースのタイトルが

This "cool" & "neat" article's title has HTML entities

、のタイトルを作成しています

This "cool" & "neat" article's title has
HTML entities

これを処理するには、プロセスプラグインを作成する必要がありますか?私の移行ymlは次のようになります。

...
source:
...
    -
      name: title
      label: 'Title'
      selector: title
...
process:
  title: title
...
1
ttamniwdoog

これを行うには、カスタムプロセスプラグインを定義する必要があるようです- this または this ページでプラグインのプラグインが見つかりません。

PHPという関数があり、htmlspecialchars_decodeは、おそらく使用できるすべてのHTML特殊文字エンティティをデコードします。文字列を受け取り、デコードされた文字列を返します。また、二重引用符と単一引用符の両方を変換するために、ENT_QUOTESフラグを渡す必要があります。

だからあなたはおそらく次のようなことをすることができます:

namespace Drupal\YOUR_MODULE\Plugin\migrate\process;

use Drupal\migrate\MigrateExecutableInterface;
use Drupal\migrate\ProcessPluginBase;
use Drupal\migrate\Row;

/**
 * Decode HTML entities.
 * 
 * @MigrateProcessPlugin(
 *   id = "decode_html_entities"
 * )
 */
class DecodeHtmlEntityString extends ProcessPluginBase {

  public function transform(string $value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
    return htmlspecialchars_decode($value, ENT_QUOTES);
  }

}
1
user78966